在 Angular 资源中使用动态参数

Use dynamic parameters in Angular Resource

Angular-资源文档说参数:

If any of the parameter value is a function, it will be executed every time when a param value needs to be obtained for a request (unless the param was overridden).

不幸的是,这对我不起作用,该函数仅在资源初始化时调用一次。

我的情况: 我有一个全局应用程序状态,您可以在应用程序的顶部导航中选择它。此状态会影响大多数调用中的查询参数。 (例如,呼叫有效的日期)。我在服务中维护这个全局状态。

我的服务(模型层)如下所示:

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

我做错了什么?有没有更好的方法为某些资源注入动态参数?我知道请求拦截器的概念,但我只在某些服务而不是所有服务上需要它。

感谢您的帮助!

我在 Github 上的 frfancha 的帮助下找到了答案,技巧是传递函数本身而不是函数的结果。

在此处查看 ApplicationState.getCurrentTime 后缺少的括号:

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

现在每次发出请求时都会评估该函数。

可在此处找到更新的 Plnkr:http://plnkr.co/edit/Qx9HSsFwt5LDiM6Vmgff?p=preview 积分转到 Github

上的 frfrancha