结合$ resource& Angular工厂中的非$资源方法

时间:2015-07-20 14:07:35

标签: javascript angularjs http

不确定为什么这个看似简单的任务让我感到困惑。我正在尝试向Angular服务添加一些方法。该服务刚开始只对我的API进行一次$resource调用。我正在添加的是保存和获取本地对象的简单非$ resource方法:

'use strict';

angular.module('gameApp')
  .factory('searchService', ['$resource',
    function($resource) {
      var base = '/api/search?query=:query';
      var latestResults = {};

      return $resource(base, {}, {
        getResults: {method: 'GET', url: base}
      }),
      saveLatest: function(results) {
        latestResults = results;
      },
      getLatest: function() {
        return latestResults;
      }
    }]);

显然上述内容结构不正确(就saveLatestgetLatest而言)。

2 个答案:

答案 0 :(得分:1)

您返回的对象应采用

格式
return {
   method1: function(){...},
   method2: function(){...},
   method3: function(){...},
};

你的看起来像这样:

return method1(),
       method2: function(){...},
       method3: function(){...}

希望你能看到上面的材料差异。

根据another question

,您的代码应该类似于以下内容
return {
    getResults: $resource(base,{method: 'GET', url: base}),
    saveLatest: function(results) {
        latestResults = results;
    },
    getLatest: function() {
        return latestResults;
    }
}

答案 1 :(得分:1)

现在你设置的方式是同时返回多个逗号描述的值,这是不可能的(假设这不是ES6)。您需要返回一个包含三个返回值的数组或对象:

return [
  $resource(base, {}, {
    getResults: {method: 'GET', url: base}
  }),
  function(results) {
    latestResults = results;
  },
  function() {
    return latestResults;
  }]

return {
    resource: $resource(base, {}, {
        getResults: {method: 'GET', url: base}
    }),
    saveLatest: function(results) {
        latestResults = results;
      },
    getLatest: function() {
        return latestResults;
    }
}

此外,通常没有理由公开整个$ resource对象,因此最好只返回它的getResults方法。