我正在查看使用Angular构建的一些示例应用程序。我正在寻找模型的创建/存储位置。我注意到有时模型存储在一个普通的javascript文件中,如下所示:
customer.js:
function customer(){
this.firstName;
this.lastName;
}
customer.prototype.getFullName = function(){
return this.firstName + ' ' + this.lastName;
}
我还看到了工厂的使用:
customerFactory.js:
app.factory("customer", function(){
return function(){
this.firstName;
this.lastName;
this.getFullName = function(){
return this.firstName + ' ' + this.lastName;
};
};
});
所以我的问题是,你在哪里存储模型以及为什么?这个人比其他人有更多优势吗?
答案 0 :(得分:1)
我特别喜欢第二种方法,即使用工厂来创建模型。
myApp.factory('Models', [function() {
return {
Customer: (function() {
var cls = function(obj) {
this.firstName = obj && obj.firstName || null;
this.lastName = obj && obj.lastName || null;
}
cls.prototype.getFullName = function() {
return this.firstName + ' ' + this.lastName;
};
return cls;
})(),
Order: (function() {
var cls = function(obj) {
this.id = obj.id || null;
this.amount = obj.amount || null;
}
/* methods */
return cls;
})()
}
}]);
这样,您只需要在控制器中注入一个依赖项,并且明确表示该对象是已定义的模型。
myApp.controller('myCtrl', ['$scope', 'Model', function($scope, Model) {
$scope.customer = new Model.Customer({
firstName: "Beterraba"
, lastName: "Abacate"
});
}]);
答案 1 :(得分:1)
我更喜欢创建一个名为models
的文件夹,每个模型都有自己的文件,定义为工厂。我还使用$resource
来定义我的模型,这样我就不必担心$http
次调用(好吧,几乎从不)。
为什么呢?因为这是Angular应用程序的构建方式。这样做允许您将它们注入您的控制器,指令等。如果您希望您的模型与Angular无关,那很好。它适合“端口和适配器”架构。稍后将它们作为工厂公开。将您的Angular-agnostic代码分离到一个单独的库中,然后将它们暴露出来以便以后注入:
app.factory("Customer", function(){ return Models.Customer; });
app.factory("Order", function(){ return Models.Order; });
另外,请注意我喜欢用大写字母命名我的类对象...这是一个惯例我真的想表明它是一个要实例化的“类”。