Как передать заголовки "на лету" в $resource для angularjs

Прямо сейчас, единственный способ, который я знаю для динамического определения токенов в заголовках для вызова с угловым выражением, - через $http следующим образом:

return $http.get({
  url: 'https://my.backend.com/api/jokes',
  params: {
    'jokeId': '5',
  },
  headers: {
    'Authorization': 'Bearer '+ $scope.myOAuthToken
  }
});

Но я хочу выяснить, как передать это через $resource, вот какой-то псевдокод, который не работает:

...
.factory('myFactory',
  ['$resource',
    function($resource){
      return {
        jokes: $resource('https://my.backend.com/api/jokes', null, {
          query: {
            method: 'GET'
          }
        })
      };
    }
  ]
);
...
return myFactory.jokes.query({
  'jokeId': '5',
  'headers': {
    'Authorization': 'Bearer '+ $scope.myOAuthToken
  }
});

Как передать заголовки "на лету" в $resource для angularjs?

Ответы

Ответ 1

Я не думаю, что это можно сделать так, как вы пытаетесь, поскольку объект конфигурации недоступен в методе действий. Но метод действия имеет его. Так что вы можете сделать, а не сразу возвращать ресурс, создать функцию, которая принимает параметр токен auth, а затем построить ресурс и вернуться.

return {
    jokes: function (token) {
        return $resource('https://my.backend.com/api/jokes', null, {
            query: {
                method: 'GET'
                headers: {
                    'Authorization': 'Bearer ' + token
                }
            }
        })
    }
};

Затем вызовите функцию обслуживания как

myFactory.jokes($scope.myOAuthToken).query({'jokeId': '5'});