声明模型定义以与Angular中的RESTful“new”一起使用

时间:2013-08-05 04:59:10

标签: javascript angularjs

有没有人知道在angularjs angular.module()样式中声明模型定义是否有方法论或最佳实践?我发现有必要为我将导航到“/ item / new”的事件有一个骨架模型定义 - 该表单对执行“/ item /”时来自服务的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
    }

非常感谢

2 个答案:

答案 0 :(得分:2)

angular.module API公开了四种方法,这些方法提供了这种行为的微妙不同的实现:

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

This Google groups post给出了所有这些用例的相当清晰的概要。

This snippet在小角度应用的上下文中显示了所有这些内容。

我认为我不能为这些链接添加太多相对于这些链接的每个地方相互之间的位置。但是,出于您的目的,您似乎想要执行“模型工厂”功能并接收执行该功能的结果:为此您可能需要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);
    }

答案 1 :(得分:1)

彼得的答案非常好,但我有一个建议 - 不要创建模型的模块,而是创建模型的工厂:

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

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