【发布时间】:2017-12-02 07:29:23
【问题描述】:
这就是我的 Angular 应用程序的样子。
(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;
}
如果你在 //line## 上查看我上面的custCtrl,我正在调用工厂方法来实例化客户对象,如下所示。
vm.customer= custFactory.Create('customer');
但如果我不创建客户虚拟机和工厂并简单地分配一个空字符串,如下所示。
vm.customer= {};
它仍然可以正常工作。
所以我的问题是我为什么要创建虚拟机和工厂?它是什么 好处??
【问题讨论】:
-
您使用
var vm = this;只是为了表示绑定范围并删除$scope注入到您的控制器中。在一般情况下,您使用应该可数据绑定到视图的属性来装饰vm。我不明白为什么你需要//line##行上的代码,如果你在GetCustomers()方法中用data.fields覆盖vm.customer。
标签: javascript jquery angularjs loose-coupling angular-factory