我知道这可能会使特定状态或视图中的缓存失效
在状态提供程序中禁用缓存
$stateProvider.state('myState', {
cache: false,
url : '/myUrl',
templateUrl : 'my-template.html'
})
使用属性
禁用缓存<ion-view cache-view="false" view-title="My Title!">
...
</ion-view>
但我需要假设特定视图转换中的缓存,例如
$state.go('home',{cache: false});
这里我必须弄错家庭状态缓存,我试过这个但还没有工作
答案 0 :(得分:3)
选项1)您可以像在$state.go('home',{cache: false});
中那样传递状态参数,并在控制器的beforeEnter事件中处理它。请记住将$ stateParams注入您的控制器。
angular.module('app.controllers', []).controller('HomeCtrl', function($scope, $stateParams) {
$scope.$on('$ionicView.beforeEnter', function(){
if ($stateParams.cache === false) {
// Do whatever you need, reload $scope data, etc
}
});
...
});
此外,您需要在路由器配置中为参数添加说明。请注意params: {cache: null}
:
$stateProvider.state('app.home', {
url: '/home',
params: { cache: null },
views: {
'menuContent': {
templateUrl: 'templates/home.html',
controller: 'HomeCtrl'
}
}
});
选项2)如果您不介意清除所有视图的缓存,可以使用:
$ionicHistory.clearCache().then(function(){
$state.go('home');
});
答案 1 :(得分:0)
第一次使用模板时,会将其加载到模板缓存中以便快速检索。您可以直接使用$templateCache
服务在缓存中添加模板或从缓存中删除它。试试下面的例子
app.run(function($rootScope, $templateCache) {
$rootScope.$on('$routeChangeStart', function(event, next, current) {
if (typeof(current) !== 'undefined'){
$templateCache.remove(current.templateUrl);
}
//Or if you want to remove next state from cache
if (typeof(next) !== 'undefined'){
$templateCache.remove(next.templateUrl);
}
.....
});
}