对特定转换使用缓存视图false

时间:2015-05-28 05:55:24

标签: angularjs cordova ionic-framework

我知道这可能会使特定状态或视图中的缓存失效

在状态提供程序中禁用缓存

$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}); 

这里我必须弄错家庭状态缓存,我试过这个但还没有工作

2 个答案:

答案 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');
});

请参阅: $ionicHistory.clearCache()

答案 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);
                }
                 .....

        });
}