2016-04-15 37 views
3

我有這樣的服務:

(function() { 
    'use strict'; 
    angular 
     .module('myApp') 
     .factory('Consultant', Consultant); 

    Consultant.$inject = ['$resource', 'DateUtils']; 

    function Consultant ($resource, DateUtils) { 
     var resourceUrl = 'api/consultants/:id'; 

     return $resource(resourceUrl, {}, { 
      'query': { method: 'GET', isArray: true}, 
      'get': { 
       method: 'GET', 
       transformResponse: function (data) { 
        data = angular.fromJson(data); 
        return data; 
       } 
      }, 
      'update': { 
       method: 'PUT', 
       transformRequest: function (data) { 
        return angular.toJson(data); 
       }, 
       transformResponse: function (data) { 
        data = angular.fromJson(data); 
        return data; 
       } 
      }, 
      'save': { 
       method: 'POST', 
       transformRequest: function (data) { 
        return angular.toJson(data); 
       }, 
       transformResponse: function (data) { 
        data = angular.fromJson(data); 
        return data; 
       } 
      } 
     }); 
    } 
})(); 

如果我想添加URL api/consultantscustom/:id(其查詢/獲取/更新方法),這項服務?
由於看起來這個文件只能包含一個工廠,有沒有辦法做到這一點,還是我需要用新工廠創建另一個文件?

回答

2

也許我完全誤解你問什麼,但只要你喜歡,你可以有很多工廠在一個文件中(或者看起來很有用):

(function() { 
    'use strict'; 

    angular.module('myApp') 
     .factory('Consultant', Consultant) 
     .factory('Custom', Custom); 

    Consultant.$inject = ['$resource', 'DateUtils']; 
    Custom.$inject = ['$resource']; 

    function Consultant ($resource, DateUtils) { 
     var resourceUrl = 'api/consultants/:id'; 
     ... 
    } 

    function Custom ($resource) { 
     var resourceUrl = 'api/consultantscustom/:id'; 
     ... 
    } 

或者,如果你想重複使用同一工廠訪問不同的URL,您可以添加方法來設置URL,然後重新使用對通用資源的調用。

function Consultant ($resource, DateUtils) { 

    function consultants() { 
    _call_resource('api/consultants/:id'); 
    } 
    function custom() { 
    _call_resource('api/consultantscustom/:id'); 
    } 

    function _call_resource (resourceUrl) { 
    return $resource(resourceUrl, {}, { 
     ... 
    } 
    } 

    this.consultants = consultants; 
    this.custom = custom; 
    return this; 
}