向$ resource添加动态操作

时间:2014-01-17 09:50:40

标签: angularjs

有没有办法让$ resource动作之一(例如isArray或cache)动态化?

HTML

terminalsResource.findTerminals({cached: true}, function (data) {
                        $scope.terminals = data;
                    }, function (response) {

JS

//Where to add dynamic properties?
    return $resource("rest/terminals", {useCache:'@cached'}, {
        /**
         * @method findTerminals
         * Find all terminals
         * @return {Array} Terminals
         */
        findTerminals: { method: "GET", isArray: true, cache: useCache}

    });

上面的代码不起作用,但它塑造了我不想做的图像

1 个答案:

答案 0 :(得分:1)

专门用于缓存:我会说您的代码应该正常工作,因为cache是您的GET操作支持的属性。它期望使用$cacheFactory构建布尔或缓存实例。

  

http://docs.angularjs.org/api/ngResource.$resource

     

缓存 - {boolean | Cache} - 如果为true,将使用默认的$ http缓存来缓存GET请求,否则如果使用$ cacheFactory构建缓存实例,则将使用此缓存用于缓存。

我唯一可以想到你的代码无效的原因是,在适当的时候没有取出给定的boolean via {useCache:'@cached'}以用于action.cache。


这种方式肯定会在您调用特定服务工厂函数时构建$resource时起作用。 测试了这个,但应该表明这个想法。

.factory('Terminal', function($resource){
  var Terminal = {};

  Terminal.findTerminals = function(params, useCache) {
    return $resource("rest/terminals", params, {
      /**
       * @method findTerminals
       * Find all terminals
       * @return {Array} Terminals
       */
      findTerminals: { method: "GET", isArray: true, cache: useCache}
    });
  }

  return Terminal;
});

然后:

Terminal.findTerminals({}, true, function (data) {
  $scope.terminals = data;
}, function (response) {