在我搜索互联网时,我发现有很多不同的方式来管理我们的Angular模板中使用的数据模型,但它们都只显示较大图片的一小部分。在一个大型应用程序中,我们需要将API数据粘贴到某种形式的JavaScript模型中,然后在模板中使用这些模型,但我不确定如何管理这些模型。以正确的方式管理AngularJS中的数据模型
阅读后this article on AngularJS models我现在意识到我应该将所有模型包装在一个服务中,以便信息在多个控制器中可用。唯一的问题是它没有解释如何将这些服务与API请求绑定。
这是我目前的实施。
客户模式
var Customer = function (obj) {
var self = this;
if (!obj) {
self.Name = null;
self.Address = null;
self.PrimaryEmailAddress = null;
self.SecondaryEmailAddress = null;
self.PhoneNumber = null;
} else {
self = obj;
}
return self;
}
然后在我的控制器,我用我的$scope
像
客户控制器这种模式
app.controller('CustomerController', [function($scope, API){
$scope.model = {};
API.Account.getCustomer({id:'12345'}, function(data){
$scope.model = new Customer(data);
});
}]);
这是我的API服务的样子
API服务
app.factory("API", ["$resource", function ($resource) {
var service = {};
service.Account = $resource('/WebApi/Account/:type/:id', {},
{
getCustomer: { method: 'GET', params: { type: 'Customer' } }
});
return service;
}])
这已经相当行之有效直到现在,当我意识到有是聚集在现在需要在子控制器中的父控制器API信息
回到上面链接的文章,我现在可以改变我的模型,所以它们被封装在一个Angular Service中,因此可以跨多个控制器使用。这种新的CustomerService
可能看起来像这样
新的CustomerService
app.factory('CustomerService', function() {
var CustomerService = {};
var customer = new Customer();
CustomerService.getCustomer = function() { return customer; }
CustomerService.setCustomer = function(obj) { customer = obj; }
return CustomerService;
});
这是不是很喜欢的文章(更简单),但它基本上包含了面向对象的类函数来获取和设置客户对象。
这种方式的问题是我们仍然无法访问实际的API端点以从服务器获取客户数据?我们是否应该将API服务和模型服务分开保存或尝试将它们合并为一个服务?如果我们这样做,那么我们还需要一种方法来区分实际从服务器获取新鲜数据和仅获取当前在单例对象中设置的Customer对象。
我想知道你对这个困境的初步反应?
UPDATE
我碰到this article,汇集了包括API请求为工厂服务
任何反馈都是有帮助的......即使我这样做都是错误的:S – 2014-08-28 00:41:55