为控制器全局缓存$ resource api请求

时间:2015-04-24 19:58:22

标签: javascript angularjs

我的角度应用程序几乎依赖于一个api调用(例如 "scripts": { "postinstall": "./node_modules/protractor/bin/webdriver-manager update" } )。

我有多个需要使用该api请求中的数据的路由,模块和控制器。例如,我有:

/api/example

每个功能控制器都需要来自public |__feature1 |__ feature1.controller.js |__ feature1.route.js |__feature2 |__ feature2.controller.js |__ feature2.route.js |__core |__ core.controller.js |__ core.nav.controller.js |__ core.route.js |__ core.service.js |__ app.js 的数据。

/api/example

的示例
core.service.js

通常我会在angular.module('myApp') .factory('MainService', ['$resource' function($resource) { return $resource('/api/example', {}, { get: { method: 'GET' } }); } ]); 中执行某些操作:

feature1/feature.controller.js

然后我会在angular.module('feature1') .controller('Feature1Ctrl', ['MainService', function(MainService){ MainService .get() .$promise .then(function(data){ console.log(data); }); } ]);

中做同样的事情
feature2/feature2.controller.js

我的应用程序是否可以立即调用API并缓存请求数据,以便其他控制器可以访问而无需发出多个请求。

所以我基本上可以做一些事情,例如:

angular.module('feature2')
.controller('Feature2Ctrl', ['MainService',
  function(MainService){
    MainService
      .get()
      .$promise
      .then(function(data){
        // do something with the SAME data again
        console.log(data);
      });
  }
]);

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你可以毫不费力地缓存它。这样添加cache : true

angular.module('myApp')
.factory('MainService', ['$resource'
  function($resource) {
    return $resource('/api/example', {}, {
      get: {
        method: 'GET',
        cache : true // -- cached
      }
    });
  }
]);

如果您需要更复杂的解决方案,我还建议您查看$cacheFactory