你在哪里存储/创建你的模型在Angular?

时间:2013-11-14 16:47:23

标签: angularjs

我正在查看使用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;
    };
  };
});

所以我的问题是,你在哪里存储模型以及为什么?这个人比其他人有更多优势吗?

2 个答案:

答案 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; });

另外,请注意我喜欢用大写字母命名我的类对象...这是一个惯例我真的想表明它是一个要实例化的“类”。