2016-01-23 1 views
1

Я определил несколько угловых заводов с ngResource аналогично:Как обновить URL-адреса углового ресурса с идентификатором от аутентифицированного пользователя?

.factory('factoryName', ['$resource', '$http', 'CONSTANTS', 'authService', factoryNameCtrl]) 
function factoryNameCtrl($resource, $http, CONSTANTS, authService) { 
    var actions = { 
     'get': { 
      method: 'GET', 
      isArray: false, 
      params: { 
       service: '@service', 
       action: '@action' 
      } 
     }, 
     'post': { 
      method: 'POST', 
      isArray: false, 
      params: { 
       service: '@service', 
       action: '@action' 
      } 
     } 
    } 
    actions.get.params.userId = actions.post.params.userId = '@' + authService.currentUser.id; 
    var res = $resource(CONSTANTS.baseURL + '/:userId/integrations/:service/:action', {}, actions); 

Если бы я войти и выйти из системы с другим пользователем, значение USERID внутри завода не обновляет.

Я не хочу передавать userId в каждый параметр со всего кода, но чтобы сделать его доступным, когда он изменится.

Раньше у меня был код ниже, и я заставлял перезагружать страницу, чтобы восстановить правильные URL-адреса в ресурсе.

if (authService.isAuthenticated()) { 
     var res = $resource(CONSTANTS.baseURL + '/' + authService.currentUser.id + '/integrations/:service/:action', {}, actions); 
     return res; 
    } 

Что вы посоветуете?

ответ

1

Чтобы вычислить его свежим каждый раз, используйте функцию:

actions.get.params.userId = function() { 
    return computeCurrentUserId(); 
}; 

От Docs:

Если значение параметра является функцией, будет выполняться каждый раз когда значение параметра должно быть получено для запроса (если параметр не был переопределен).

- AngularJS $resource API Reference

+0

теперь я вспомнил, что я прочитал это давно. Спасибо, спасли мне много времени! –