5

我正在查看一些使用 Angular 构建的示例应用程序。我正在寻找模型的创建/存储位置。我注意到有时模型存储在一个普通的 javascript 文件中,如下所示:

客户.js:

function customer(){
  this.firstName;
  this.lastName;
}

customer.prototype.getFullName = function(){
  return this.firstName + ' ' + this.lastName;
}

我还看到的是使用工厂:

客户工厂.js:

app.factory("customer", function(){
  return function(){
    this.firstName;
    this.lastName;

    this.getFullName = function(){
      return this.firstName + ' ' + this.lastName;
    };
  };
});

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

4

2 回答 2

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"
    });
}]);
于 2013-11-14T17:01:12.623 回答
1

我更喜欢创建一个名为的文件夹models,每个模型都有自己的文件,定义为工厂。我也用它$resource来定义我的模型,这样我就不必担心$http调用(嗯,几乎从不)。

为什么?因为这是构建 Angular 应用程序的方式。这样做可以让您将它们注入到您的控制器、指令等中。如果您希望您的模型与 Angular 无关,那很好。它符合“端口和适配器”架构。稍后将它们暴露为工厂。将与 Angular 无关的代码分离到一个单独的库中,然后将它们公开以供稍后注入:

app.factory("Customer", function(){ return Models.Customer; });
app.factory("Order", function(){ return Models.Order; });

另外,请注意我喜欢用大写字母命名我的类对象……这是我非常喜欢指出它是要实例化的“类”的约定。

于 2013-11-14T17:08:08.687 回答