这是我的角度应用程序的样子。
$('#yourswitch').prop('checked', false);
工厂方法
(function () {
"use strict";
angular
.module("app")
.controller("custCtrl", custCtrl);
custCtrl.$inject = ['dataService','custFactory'];
/* @ngInject */
function custCtrl(dataService, custFactory) {
var vm = this;
//line##
vm.customer= custFactory.Create('customer');
GetCustomers();
function GetCustomers() {
dataService.read().then(function (data) {
vm.customer = data.fields;
}
});
}
return vm;
}
})();
查看模型
(function () {
'use strict';
angular
.module('app.factory')
.factory('custFactory', custFactory);
custFactory.$inject = ['$q'];
/* @ngInject */
function custFactory($q) {
var _create = function (type) {
var obj = {};
switch (type.toString().toLowerCase()) {
case "customer":
obj = new Customer();
break;
default:
obj = null;
}
return obj;
}
return {
Create: _create
};
}
})();
如果你检查上面 function Customer()
{
var dto = this;
dto.Customer = {
"Name" : "",
"Gender" : "", // & so on
}
return dto;
}
//行##,我正在调用工厂方法来实例化客户对象,如下所示。
custCtrl
但如果我不创建客户VM& factory和simple分配一个空字符串,如下所示。
vm.customer= custFactory.Create('customer');
仍然没有问题。
所以我的问题为什么要创建一个VM&厂??它是什么 益处??
答案 0 :(得分:1)
当你有嵌套控制器时,控制器别名是合适的,
虽然工厂或服务适合在不同控制器之间共享数据。
例如,如果您使用来自不同控制器的mehtod CreateCustomer ,那么它非常有用。由于您不会在其中存储数据,因此最好使用服务。无论如何,它允许您保存代码。
示例强>
var app = angular.module("myApp", []);
app.factory("myFactory", function(){
var private = {
users: {}
};
var data = {
getUser: function(id){
return private.users[id];
},
createUser: function(id){
private.users[id] = someData;
return private.currentUser;
}
};
return data;
});
app.controller("myC1", ["myFactory", function(myFactory){
$scope.user = myFactory.createUser(1);
}]);
app.controller("myC2", ["myFactory", function(myFactory){
$scope.user = myFactory.getUser(1);
}]);
如您所见,两个控制器可以访问相同的数据
答案 1 :(得分:1)
AngularJS模式和最佳实践涉及遵循MV(无论)模式和设计/实现具有高内聚和低耦合的模块化组件。这样,您可以轻松修改一段代码,而无需在另一段代码中进行更改。
通常,工厂或服务用作与RESTful API或某种服务器端代码交互的客户端代码层。通常这是工厂的唯一功能。这样,您可以将工厂注入需要使用工厂功能的任何控制器。当您需要修改调用API的方式时,您只需要在工厂中进行更改,而不是使用该函数的每个控制器。
与您创建的视图模型对象类似,您只需在一个位置进行更改。想象一下,有五个不同的控制器都需要使用Customer
对象。现在,您决定要删除Name
字段,并将其替换为FirstName
和LastName
。您是想通过所有控制器进行更改,还是只想更改视图模型?
给你简短的答案。没有创建视图模型或工厂/服务,功能错误。从架构或设计的角度来看,在您的应用程序中强烈分离关注点很有意义。因此,使用工厂进行数据访问和数据对象的视图模型是有意义的。
尝试想象您的应用程序不断增长,拥有数百个控制器/视图和数十个工厂或服务。如果您没有从开发阶段开始实施这些模式和最佳实践,那么维护该应用程序将是一个巨大的痛苦。