在Angular Resource中使用动态参数

时间:2015-01-16 09:55:18

标签: angularjs angular-resource angularjs-resource

Angular-Resource文档说明参数:

  

如果任何参数值是一个函数,每次需要获取一个请求的参数值时都会执行它(除非重写了参数)。

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

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

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

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

我希望每次拨打电话都会调用ApplicationState.getCurrentTime()。它只被调用一次。

我创建了一个plunkr作为例子。打开浏览器调试控制台,看到ApplicationState.getCurrentTime()只调用一次,而不是每次单击按钮。

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

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

我在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