Angular Factory&使用ngResource控制器最佳实践

时间:2015-09-24 20:30:01

标签: angularjs controller factory ngresource

这是我的控制器代码,用于获取,添加和删除客户的简单应用程序。我刚刚观看了John Papa 2014年的演讲,并试图尽可能地遵循他的风格指南。我在后端使用node和mongo并试图尽可能地使用RESTful。我在部分中加载CustomersController(并使用控制器作为语法)。每次我加载我的部分并创建我的控制器的实例我想得到所有的客户,所以我可以显示它们。我在一个名为getAll的函数中包装了$ resource查询调用,我只是立即调用它,然后在控制器的每个回调中再次调用它来更新列表。这是可以的,还是我需要采取另一种方法。对于这个简单的应用程序,还有其他我应该避免的事情吗?

控制器:

(function() {
    'use strict';

angular.module('storeApp').controller('CustomersController', CustomersController);

CustomersController.$inject = ['CustomersFactory'];

/* @ngInject */
function CustomersController(CustomersFactory) {
    var vm = this;

    /* RESTful Controller functions */

    vm.getAll = function() {
        vm.customers = CustomersFactory.query(function() {
            // Do stuff after getting all the customers
        });
    };

    vm.getAll();

    vm.create = function(customer) {
        CustomersFactory.save(customer, function () {
            vm.getAll();
        });
    }

    vm.delete = function(customer) {
        customer.$delete(function() {
            vm.getAll();
        });
    };
}
})();

工厂:

(function() {
    'use strict';

angular.module('storeApp').factory('CustomersFactory', CustomersFactory);

CustomersFactory.$inject = ['$resource', '$http'];

/* @ngInject */
function CustomersFactory($resource, $http) {
    return $resource('/customers/:id', { id: '@_id'});
}

})();

总结一下我很好奇的一些事情:

  • 1)是否正在为getAll创建一个包装器并从我的其他控制器方法中调用它?
  • 2)使用资源$ delete的实例方法比使用$ resource方法更好地将整个客户对象从我的视图/控制器发送到工厂?是否有RESTful /最佳实践方法在此处删除客户而不在URL中公开ID?
  • 3)我还有其他违反的最佳做法吗? (我知道我还没有做任何错误处理)

1 个答案:

答案 0 :(得分:1)

你有个好的开始。使用角度起床和跑步可能令人生畏。

  1. 不,这是额外的开销。您已将客户列表存储在内存中。更新列表中的对象,无需再次检索它们。

  2. 没有。无论如何,id都在整个客户对象中,所以你并没有真正隐藏它。您只是发送了超过必要的数据。

  3. 这是一个非常基本的开始,但除了你触及的领域之外,我会说不。