Используйте динамические параметры в Angular Resource

документация Angular-Resource говорит о параметрах:

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

К сожалению, у меня это не работает, функция вызывается только один раз при инициализации ресурса.

Мой случай: у меня есть глобальное состояние приложения, которое вы можете выбрать в верхней части навигации приложения. Это состояние влияет на параметр запроса в большинстве вызовов. (например, дата, на которую вызов действителен). Я поддерживаю это глобальное состояние в сервисе.

Мои сервисы (слой модели) выглядят так:

function($resource, ApplicationState) {
      return $resource('test/:_id', {
        date: ApplicationState.getCurrentTime()
      }, {
        get: {
          method: 'GET'
        }
      });
    }

Я ожидаю, что ApplicationState.getCurrentTime() будет вызываться при каждом вызове get. Он вызывается только один раз.

Я создал plunkr в качестве примера. Откройте консоль отладки браузера, чтобы увидеть, что ApplicationState.getCurrentTime() вызывается только один раз, а не каждый раз, когда вы нажимаете кнопку.

http://plnkr.co/edit/qeoIUuzFCqnQNdnYp5ZX?p=preview

Что я делаю неправильно? Есть ли лучший способ ввести динамические параметры в некоторые ресурсы? Я знаю концепцию перехватчиков запросов, но мне это нужно только для некоторых сервисов, а не для всех.

Спасибо за вашу помощь!


person ulilicht    schedule 16.01.2015    source источник
comment
Я открыл отчет об ошибке для команды angular, чтобы узнать, является ли это ошибкой или непониманием документации: github.com/angular/angular.js/issues/10803   -  person ulilicht    schedule 19.01.2015


Ответы (1)


Я нашел ответ с помощью frfancha на Github, хитрость в том, чтобы передать саму функцию, а не результат функции.

См. отсутствующие скобки после ApplicationState.getCurrentTime здесь:

function($resource, ApplicationState) {
  return $resource('test/:_id', {
    date: ApplicationState.getCurrentTime
  }, {
    get: {
      method: 'GET'
    }
  });
}

Теперь функция оценивается каждый раз, когда делается запрос.

Обновленный Plnkr можно найти здесь: http://plnkr.co/edit/Qx9HSsFwt5LDiM6Vmgff?p=preview Авторы отправляются на frfrancha на Github.

person ulilicht    schedule 20.01.2015