Angularjs - $ resource as a service,with multiple urls

时间:2016-04-15 09:48:43

标签: angularjs

我有这项服务:

<div id="parent-2" style="display: none;">    
    <div class="item" style="display: none;">
    <div class="item" style="display: none;">
    <div class="item">
    <div class="item" style="display: none;">
</div>

<script>
   var hidden_items = $('#parent-2').find('.item:hidden').length;
   console.log (hidden_items);
</script>   

如果我想将网址(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; } } }); } })(); (及其查询/获取/更新方法)添加到此服务中,该怎么办?
因为看起来这个文件只能包含一个工厂,有没有办法做到这一点,还是需要用新工厂创建另一个文件?

1 个答案:

答案 0 :(得分: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;
}