繁体   English   中英

AngularJS。 使用缓存时防止两次加载JSON数据

[英]AngularJS. Prevent loading JSON data twice when using caching

我有2个控制器ParentCtrlChildCtrl

<div ng-controller="ParentCtrl">
  <div ng-controller="ChildCtrl"> 
  </div>
</div>

他们使用相同的服务方法来获取数据。 数据被缓存(使用$http服务的cache:true参数)。

angular.module('myApp')
    .factory("myService", [
        '$http',
        function $http) {
        return {
            getMyData: function () {
               return $http.get(url, {cache: true}).then(function (response) {
                  return data = response.
            });

因此,问题在于这2个控制器开始同时工作-这意味着myService#getMyData方法可被调用两次,即两次往返服务器。 但是我只需要一个往返,所以ChildCtrl将从缓存中获取结果。

如何解决这个问题呢?

谢谢

与其做一些同步结构,不如将其作为预取数据(viewModel)添加到路由中:

   $routeProvider
    .when('/', {
        templateUrl: 'index.html',
        controller: homeController,
        caseInsensitiveMatch: true,
        resolve: {
            sharedData: function($http, myService) {
                var sharedPromise = myService.getMyData().then(function(results) {
                    return results;
                });
            }
        }
    });

然后,在控制器中,至少在根目录中,可以引用共享数据,就像引用服务一样:

function homeController($scope, $http, sharedData) {}

请原谅伪代码,但这至少可以确保您确保一次提取参考数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM