设计AngularJS服务的更好方法

时间:2013-09-19 13:50:34

标签: javascript rest angularjs angularjs-service

我正在编写一个与REST服务器交互的AngularJS客户端应用程序。

要管理客户端/服务器交互,我正在使用$resource抽象。 实际上我将每个资源都写成一个独立的service并仅将其注入将要使用它的控制器中。

我已经开始使用angularjs-seed进行开发了,所以在我的separed services.js文件中,我获得了越来越多的服务:

angular.module('testReqService', ['ngResource']).
    factory('TestReq', function($resource){
    return $resource('http://test-url.com/api/test', {}, {});
});
angular.module('registerService', ['ngResource']).
    factory('Register', function($resource){
    return $resource('http://test-url.com/api/user/new', {}, {});
});
//More services here...

一切正常,但我想知道这是否是最佳方法。

因此,最好为不同的REST请求编写单独的服务,并仅在需要它的控制器中注入它们,或者更好的方法是使用不同的方法和URL为每个请求编写单个服务?< / p>

1 个答案:

答案 0 :(得分:12)

我更喜欢第二种方法:

var resources = angular.module("myapp.resources", ['ngResource']);

resources.factory('Constants', [
    function() {
        return {
            RESOURCE_URL: "http://www.example.com/rest"
        }
    }
]);

resources.factory('Rest', ['Constants', '$resource', function(C, $resource) {
    return {
        Users: $resource(C.RESOURCE_URL + '/users/:id', {
            id: '@id',
        }, {})
        , Posts: $resource(C.RESOURCE_URL + '/posts/:user', {
              user: '@'
        }, {})
    }
}]);

当您拥有多个资源时,管理控制器中的所有依赖项会变得非常烦人。这样,你所要做的只是注入一个。在我看来,在阅读控制器时也更容易理解:

$scope.user = Rest.Users.get({id: 1});

更容易理解

$scope.user = Users.get({id: 1});