मैंने इस ब्लॉग पोस्ट में उस सटीक मुद्दे से निपटने की कोशिश की है ।
मूल रूप से, डेटा मॉडलिंग के लिए सबसे अच्छा घर सेवाओं और कारखानों में है। हालांकि, इस बात पर निर्भर करता है कि आप अपने डेटा और आपके द्वारा आवश्यक व्यवहार की जटिलता को कैसे पुनः प्राप्त करते हैं, कार्यान्वयन के बारे में बहुत सारे तरीके हैं। वर्तमान में कोणीय का कोई मानक तरीका या सर्वोत्तम अभ्यास नहीं है।
$ Http , $ संसाधन और रेस्टैंगुलर का उपयोग करते हुए पोस्ट तीन दृष्टिकोणों को शामिल करती है ।
getResult()
नौकरी मॉडल पर एक कस्टम विधि के साथ प्रत्येक के लिए कुछ उदाहरण कोड यहां दिए गए हैं :
रेस्टैंगुलर (आसान मटर):
angular.module('job.models', [])
.service('Job', ['Restangular', function(Restangular) {
var Job = Restangular.service('jobs');
Restangular.extendModel('jobs', function(model) {
model.getResult = function() {
if (this.status == 'complete') {
if (this.passed === null) return "Finished";
else if (this.passed === true) return "Pass";
else if (this.passed === false) return "Fail";
}
else return "Running";
};
return model;
});
return Job;
}]);
$ संसाधन (थोड़ा और अधिक दृढ़):
angular.module('job.models', [])
.factory('Job', ['$resource', function($resource) {
var Job = $resource('/api/jobs/:jobId', { full: 'true', jobId: '@id' }, {
query: {
method: 'GET',
isArray: false,
transformResponse: function(data, header) {
var wrapped = angular.fromJson(data);
angular.forEach(wrapped.items, function(item, idx) {
wrapped.items[idx] = new Job(item);
});
return wrapped;
}
}
});
Job.prototype.getResult = function() {
if (this.status == 'complete') {
if (this.passed === null) return "Finished";
else if (this.passed === true) return "Pass";
else if (this.passed === false) return "Fail";
}
else return "Running";
};
return Job;
}]);
$ http (कट्टर):
angular.module('job.models', [])
.service('JobManager', ['$http', 'Job', function($http, Job) {
return {
getAll: function(limit) {
var params = {"limit": limit, "full": 'true'};
return $http.get('/api/jobs', {params: params})
.then(function(response) {
var data = response.data;
var jobs = [];
for (var i = 0; i < data.objects.length; i ++) {
jobs.push(new Job(data.objects[i]));
}
return jobs;
});
}
};
}])
.factory('Job', function() {
function Job(data) {
for (attr in data) {
if (data.hasOwnProperty(attr))
this[attr] = data[attr];
}
}
Job.prototype.getResult = function() {
if (this.status == 'complete') {
if (this.passed === null) return "Finished";
else if (this.passed === true) return "Pass";
else if (this.passed === false) return "Fail";
}
else return "Running";
};
return Job;
});
ब्लॉग पोस्ट स्वयं इस तर्क पर अधिक विस्तार में जाता है कि आप प्रत्येक दृष्टिकोण का उपयोग क्यों कर सकते हैं, साथ ही अपने नियंत्रकों में मॉडल का उपयोग करने के कोड उदाहरण भी दे सकते हैं:
एंगुलरजेएस डेटा मॉडल: $ http वी.एस. $ संसाधन वीएस रेस्टेंगुलर
एक संभावना है कि कोणीय 2.0 डेटा मॉडलिंग के लिए अधिक मजबूत समाधान प्रदान करेगा जो सभी को एक ही पृष्ठ पर मिलता है।