繁体   English   中英

如何缓存AngularJS UI路由器解析?

[英]How to cache AngularJS ui-router resolve?

不确定这是否是陈述问题的最佳方法,但我只希望在更改状态时运行一次解析。 这是因为我有多个选项卡,并且需要使用AJAX调用来获取模板的数据。 因此,当您单击选项卡时,我会将这些信息存储到$ scope中。 但是,如果用户切换到另一个选项卡并返回,我不想继续拨打此电话。

这是我的$ stateProvider现在的样子:

  state('something', {
    views: {
      'filters.form': {
        templateUrl: '<%= asset_path('my_path.html') %>',
        controller: function($scope, sources){
          $scope.sources = sources;
        }
      }
    },
    resolve: {
      sources: function($http) {
        return $http.get('/sources').success(function(data){
          return JSON.parse(data.sources);
        });
      }
    }
  })

效果很好,但是每次我切换选项卡并返回时,它都会发出我不希望的另一个呼叫。

我试图将$ scope传递到解决方案中,并检查$ scope.sources是否存在,然后再进行AJAX调用,但这没有用。

我只是将其移动到服务中,然后将其缓存并注入解析器中。

app.service('SourceService',['$http', function(){ 
  var _cachedPromise;
  this.getSources = function(){
     return _cachedPromise || _cachedPromise = $http.get('/sources').then(function(result){
          //return result.data.sources //If the data is already an object which most possibly is just do 
          return JSON.parse(result.data.sources);
      });
  }
}]);

现在解决:

 resolve: {
      sources: function(SourceService) {
        return SourceService.getSources();
      }
    }

或者只是自己解决。

暂无
暂无

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

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