是否可以使用多个控制器在离子视图上缓存内容?

时间:2016-02-09 15:21:39

标签: caching mobile ionic-framework

我有一个使用标签的离子应用程序,其中一个标签有一个带有2个控制器的视图。当用户点击标签时,他会看到搜索结果,当他点击其中一个结果时,他会看到特定搜索结果的详细视图。

标签设置如下:

.state('tab', {
    url: '/tab',
    abstract: true,
    templateUrl: 'templates/tabs.html'
})
.state('tab.search', {
url: '/search',
views: {
  'tab-search': {
    templateUrl: 'templates/search.html',
    controller: 'searchCtrl',
    resolve: {
      data: function(searchService, $stateParams) {
        return searchService.getSearch($stateParams.args);
      }
    }
  }
}
})
.state('tab.home', {
    url: '/home/{user_handle}/{result_id}',
    views: {
      'tab-search': {
    templateUrl: 'templates/home.html',
    controller: 'homeCtrl',
    resolve: {
      data: function(homeService, $stateParams, $state) {
        return  homeService.getData($stateParams.user_handle, $stateParams.result_id)
            .catch(function(err) {
              if (err.status == 401) { //unauthorized
                $state.go("front");
              } else {
                console.error(err);
              }
            });
      }
    }
      }
    }
})

缓存配置如下: $ionicConfigProvider.views.maxCache(10);

当我点按搜索标签时,应用会拨打后端,当我点按搜索结果时,应用再次拨打电话,当我通过点击后退按钮返回搜索结果时 - 再次拨打电话,当我再次点击相同的结果时 - 再次打电话。

这让我相信视图缓存无效。我想知道这是因为我在1个视图上有2个控制器。如果这使得缓存无法实现,那么我还有哪些方法可以消除无用的api调用?

1 个答案:

答案 0 :(得分:1)

似乎这种情况正在发生,因为我使用的是解析器,解析器不受缓存的影响。当用户切换到缓存视图时会发生这种情况:

  1. 解析器完成
  2. 控制器无法加载
  3. 查看来自缓存的加载
  4. 我不确定是否要使用解析器,因为有pitfalls。但是我越来越倾向于使用一些缓存库来缓存我的api调用,而不是依赖于视图缓存。