2

有谁知道是否有以 angularjs angular.module() 样式声明模型定义的方法或最佳实践?我发现有必要为我导航到“/item/new”的事件定义一个骨架模型定义——该表单在执行“/item/: id/edit”,但调用 new 时没有 Item,因为您没有访问服务。

我知道我可以简单地声明一个全局模型或一个名为“模型”的全局对象,我可以自己存储它们,但我很好奇是否有任何角度用户有更好的解决方案?我希望有这样的事情:

angular
.module('appModels', [])
.model('item', function(){
    // Perform some operations like u would in a factory
    return {
      name: '',
      price: 0
    }
});

或者更理想的是:

    return {
      name: String,
      price: Number
    }

万分感谢

4

2 回答 2

2

angular.moduleAPI公开了四种方法,它们提供了这种行为的细微不同的实现:

  • module.value()
  • module.factory()
  • module.service()
  • module.provider()

这篇 Google 群组帖子对所有这些用例进行了相当清晰的概述。

这个片段在一个小的 Angular 应用程序的上下文中显示了所有这些。

我不认为我可以为这些链接添加太多相对于这些功能中的每一个相对于彼此的位置。但是,出于您的目的,您似乎想要执行“模型工厂”功能并接收执行该功能的结果:为此,您可能想要module.factory()

angular
    .module('appModels', [])
    .factory('item', function(){
        return {
          name: '',
          price: 0
        }
    });

然后你可以像这样注入这个工厂(注意注入的对象是工厂函数返回的实例):

angular
    .module('itemController', ['appModels'])
    .controller('itemCtrl', function($scope, item) {
        console.log(item.name);
        console.log(item.price);
    }
于 2013-08-05T05:21:33.153 回答
1

彼得的回答很好,但我有一个建议——不要创建模型的模块,而是创建模型的工厂:

angular
.module('app', [])
.factory('appModels', function(){
    return {
        car: function (){
            return {
                name: '',
                price: 0
            };
        },
        animal: function (){
            return {
                name: '',
                kind: ''
            };
        }
    } 
});

在这种情况下,您将使用appModels.carappModels.animal访问您的模型。

于 2013-08-05T06:01:43.310 回答