Bu blog yazısında bu sorunun üstesinden gelmeye çalıştım .
Temel olarak, veri modelleme için en iyi yer hizmetler ve fabrikalardadır. Ancak, verilerinizi nasıl alacağınıza ve ihtiyacınız olan davranışların karmaşıklığına bağlı olarak, uygulama hakkında gitmenin birçok farklı yolu vardır. Açısal şu anda standart bir yol veya en iyi uygulama yoktur.
Gönderi , $ http , $ resource ve Restangular kullanarak üç yaklaşımı kapsar .
İşte getResult()
Job modelinde özel bir yöntemle her biri için bazı örnek kodlar :
Dikdörtgen (kolay bezelye):
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;
}]);
$ resource (biraz daha kıvrımlı):
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 (hardcore):
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;
});
Blog yazısının kendisi, her bir yaklaşımı neden kullanabileceğinizin ardındaki mantık ve modellerin denetleyicilerinizde nasıl kullanılacağına ilişkin kod örnekleriyle ilgili daha ayrıntılı bilgi verir:
AngularJS Veri Modelleri: $ http VS $ resource VS Restangular
Angular 2.0'ın, herkese aynı sayfaya ulaşmasını sağlayan veri modelleme için daha sağlam bir çözüm sunma olasılığı vardır.