如何缓存AngularJS的ui-router解析

How to cache AngularJS ui-router resolve?

本文关键字:AngularJS ui-router 解析 缓存 何缓存      更新时间:2023-09-26

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

这是我的$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);
        });
      }
    }
  })

这工作得很好,但每次我切换tab并返回时,它都会发出另一个我不想要的调用

我试图将$scope传递到解析中,并检查是否$scope。源代码在我进行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);
      });
  }
}]);

现在在解析do:-

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

或者直接在解析本身中执行