我有一个离子角应用程序,我使用ui-router。我的问题是,当我从状态导航到新状态时,控制器不会被破坏。因此,当用户注销并且另一个登录时,他们可以看到第一个用户数据,因为控制器仍然包含第一个用户的数据。如何在状态变化时销毁控制器?
以下是配置示例:
$stateProvider.state('root.module.view', {
url: '/path',
views: {
'content@root': {
template: require('./template.jade'),
controller: 'MyController',
controllerAs: 'myCtrl'
}
}
});
答案 0 :(得分:1)
好的我已经找到了答案,问题的根源是Ionic缓存视图以加快页面更改,但通过这样做可以防止页面上的控制器被破坏。
有更多方法可以改变这种行为。首先,您可以在路由配置中设置cache
属性,如下所示:
$stateProvider.state('root.module.view', {
url: '/path',
views: {
'content@root': {
cache: false,
template: require('./template.jade'),
controller: 'MyController',
controllerAs: 'myCtrl'
}
}
});
或者你可以用$ionicConfigProvider
这种方式完全禁用它:
$ionicConfigProvider.views.maxCache(0);
第三个选项是使用属性:
<ion-view cache-view="false" view-title="My Title!">
...
</ion-view>
答案 1 :(得分:0)
在你的控制器中尝试这个,
countAlbum.setText(currentItemMusicGroup.getCountAlbum() + this.division + R.string.list_item_textView_countSing);
当事件触发时,你可以做你的逻辑。
如果你真的想在范围被破坏时触发一些东西,
function NewsHomeController($rootScope) {
$rootScope.$on('$stateChangeSuccess',
function(event, toState, toParams, fromState, fromParams){
//do stuff here.
});
}
你可以尝试这个,但我认为这更适合指令控制器。