我有一个使用标签的离子应用程序,其中一个标签有一个带有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调用?
答案 0 :(得分:1)
似乎这种情况正在发生,因为我使用的是解析器,解析器不受缓存的影响。当用户切换到缓存视图时会发生这种情况:
我不确定是否要使用解析器,因为有pitfalls。但是我越来越倾向于使用一些缓存库来缓存我的api调用,而不是依赖于视图缓存。