2016-01-28 14 views
1

У меня есть несколько заводов в моем угловом сервисе, расположенном в другом файле js. И есть общая база всех запросов:Глобальная база ngResource

1) Разрешение: Знаменосец маркер (заголовок) (обязательно после входа в систему)
2) AccessDateTime, UserIPAddress (обязательно перед входом)
3) AccessDateTime, UserIPAddress, Идентификатор_пользователя (требуется после входа в систему)

Теперь я нахожу, что очень утомительно повторять это на каждом ресурсе. Как я могу сделать базу для этого? Я думал, что это что-то очень распространенное явление, но я не мог найти никакой документации по этому вопросу. Что-то вроде jquery.AjaxSetup(). (Только иллюстрация)

По умолчанию Код

angular.module('app.test').factory('Test', ['$resource', 
    function($resource) { 
     return { 
      resource1: $resource(
       url: 'test1/:testId/:AccessDateTime/:UserIPAddress', 
       headers: { Authorization: Bearer token}, 
       params: { testId: '@_id', AccessDateTime:'@AccessDateTime', UserIPAddress: '@UserIPAddress' } 
      }), 
      resource2: return $resource(
       url: 'test2/:testId/:AccessDateTime', 
       params: { testId: '@_id', AccessDateTime:'@AccessDateTime' } 
      }); 
     } 
    } 
]); 

код после того, как ресурсная база реализована

angular.module('app.base').factory('FactoryBase'), ['resource', 
    function($resource) {} 
     if (resource need authorization) { 
      auto append header, AccessDateTime, UserIPAddress 
     } else if (resource do not need authorization) { 
      auto append AccessDateTime 
     } 

     // depending on attribute set with authorize: true/false 
    } 
]); 

angular.module('app.test').factory('Test', ['$resource', 
    function($resource) { 
     require('FactoryBase'), 
     return { 
      resource1: $resource(
       url: 'test1/:testId', 
       authorize: true 
      }), 
      resource2: $resource(
       url: 'test2/:testId', 
       authorize: false 
      }), 
    } 
]); 
+0

Вы можете посмотреть, как Backbone расширяет классы https://github.com/jashkenas/backbone/blob/master/backbone.js#L1858 –

ответ

0

Модификатор Put функции в вашем заводе:

angular.module('app.test').factory('Test', ['$resource', 
    function($resource) { 
     var defaultConfig1 = { 
      url: 'test1/:testId/:AccessDateTime/:UserIPAddress', 
      headers: { Authorization: Bearer token}, 
      params: { testId: '@_id', 
         AccessDateTime:'@AccessDateTime', 
         UserIPAddress: '@UserIPAddress' 
        } 
     }; 
     var defaultConfig2 = { 
      url: 'test2/:testId/:AccessDateTime', 
      params: { testId: '@_id', 
         AccessDateTime:'@AccessDateTime' 
        } 
     }; 
     function mod1(arg) { 
      var obj = defaultConfig1; 
      //modify config 
      return obj; 
     }; 
     function mod2(arg) { 
      //modify and return defaultConfig 
     }; 
     return { 
      resource1: $resource(defaultConfig1), 
      resource2: $resource(defaultConfig2). 
      modified1: function (arg) { 
       return $resource(mod1(arg)); 
      }, 
      modified2: function (arg) { 
       return $resource(mod2(arg)); 
      } 
     } 
    } 
]); 

Вы имеете полную мощь JavaScript для изменения объектов конфигурации, прежде чем их возвращать.

 Смежные вопросы

  • Нет связанных вопросов^_^