是否可以清除Ionic中的视图缓存?

See*_*eer 41 javascript ionic

我目前正在开发一个Angular/Ionic/Cordova项目,我们最近升级到了最新的Ionic beta.从项目之前使用的版本开始,这引入了视图缓存.然而,它也引入了一个问题.

该应用程序面向客户,是以数据为中心的.但是,用户必须进行身份验证才能查看与其帐户关联的数据; 当用户注销并登录到另一个帐户时,由于视图仍然被缓存,因此会显示最后一个帐户的视图.

应用程序仍应在用户登录时缓存视图,因为它有助于使应用程序感觉更快,但应在用户注销时清除缓存.

设置cache-view="false"不是一个选项,因为它会完全禁用缓存.

我也尝试过设置$ionicConfig.views.maxCache(0);,然后回到默认值10,希望它会在这样做时清除缓存,但它没有效果.

我能想到的最后一件事就是在用户登录时触发一个事件,刷新当前加载到视图中的所有数据 - 但是,这需要比我认为应该花费更多的精力.

有没有办法简单地清除视图缓存?

ABC*_*.ca 65

在app.js的状态定义中,您可以添加cache:false以禁用缓存(请参阅Ionic文档中的状态提供程序中的禁用缓存.或者,您可以保留缓存,除非您知道数据已更改.

  • 如果你已经在页面上,你可以这样做, $state.go($state.currentState, {}, {reload:true})
  • 如果你处于另一个状态并且想要回到通常被缓存的状态但你希望它被刷新,你可以这样做, $ionicHistory.clearCache().then(function(){ $state.go('app.fooState') })

注意,后者需要clearCache来返回一个promise.查看我在此pull请求中所做的更改,并将您现在拥有的clearCache的实现与我的相关性进行比较:https://github.com/driftyco/ionic/pull/3724


Nir*_*dhi 19

我偶然发现了一个类似的情况,其中登录另一个用户显示我陈旧/缓存的视图.您可以cache: false在状态定义级别执行,但完全禁用应用程序中该状态的缓存.

当用户进入应用程序的登录/登录状态时,您可以清除所有缓存的视图和历史记录(如您所述).似乎很理想.

// code inside your signin controller

$scope.$on("$ionicView.enter", function () {
   $ionicHistory.clearCache();
   $ionicHistory.clearHistory();
});
Run Code Online (Sandbox Code Playgroud)


小智 8

您也可以通过设置做cache:false你的$stateProvider:

$stateProvider.state('myState', {
   cache: false,
   url : '/myUrl',
   templateUrl : 'my-template.html'
})
Run Code Online (Sandbox Code Playgroud)


And*_*tín 5

你在寻找这样的东西吗?:

$ionicHistory.clearCache();
Run Code Online (Sandbox Code Playgroud)

编辑:

Ionic 的 github 中存在一个问题: Issue