我是初学Ionic移动应用开发者。在登录和退出时,我需要重新加载页面以刷新数据,然而$state.go('mainPage')
会带用户回到视图但不重新加载页面——其后面的控制器从未被调用。
在Ionic中有没有一种清除历史记录并重新加载状态的方法?
我是初学Ionic移动应用开发者。在登录和退出时,我需要重新加载页面以刷新数据,然而$state.go('mainPage')
会带用户回到视图但不重新加载页面——其后面的控制器从未被调用。
在Ionic中有没有一种清除历史记录并重新加载状态的方法?
cache:false
时起作用。如果视图被缓存,您可以使用$ionicHistory.clearCache()
,然后使用$state.go('app.fooDestinationView')
从一个状态导航到缓存但需要刷新的状态。我已经找到了一个解决方案,帮助我完成了它。在ion-view
标签上设置cache-view="false"
解决了我的问题。
<ion-view cache-view="false" view-title="My Title!">
....
</ion-view>
正确答案:
$window.location.reload(true);
$window
而不是window
- EpokK重新加载页面并不是最好的方法。
你可以处理状态更改事件来重新加载数据而无需重新加载视图本身。
在这里阅读关于ionicView生命周期的内容:
http://blog.ionic.io/navigating-the-changes/
并在进入之前处理事件以重新加载数据。
$scope.$on('$ionicView.beforeEnter', function(){
// Any thing you can think of
});
$scope.$on('$ionicView.beforeEnter', function(scopes, states) { if (states.fromCache) { ... } }
- jakub.g$ionicHistory.clearCache([$state.current.name]).then(function() {
$state.reload();
});
ionic --version
显示版本为1.7.5。 });
- Kirill A以上提到的解决方案都无法适用于主机名与localhost
不同的情况!
我不得不将notify: false
添加到我传递给$state.go
的选项列表中,以避免在调用$window.location.reload
之前调用Angular变更监听器。最终代码如下:
$state.go('home', {}, {reload: true, notify: false});
>>> 编辑-根据您的浏览器,可能需要使用$timeout >>>
$timeout(function () {
$window.location.reload(true);
}, 100);
<<< 编辑结束 <<<
更多信息请参见ui-router reference。
正如@ezain所指出的那样,只有在必要时才重新加载控制器。更新数据的另一种更清晰的方法是在更改状态时使用广播事件,并在需要在视图上更新数据的控制器中侦听此类事件。
例如:在您的登录/注销函数中,您可以这样做:
$scope.login = function(){
//After login logic then send a broadcast
$rootScope.$broadcast("user-logged-in");
$state.go("mainPage");
};
$scope.logout = function(){
//After logout logic then send a broadcast
$rootScope.$broadcast("user-logged-out");
$state.go("mainPage");
};
现在在你的mainPage控制器中,通过使用$on函数来监听mainPage控制器内部的广播,从而触发视图中的更改,就像这样:
$scope.$on("user-logged-in", function(){
//update mainPage view data here eg. $scope.username = 'John';
});
$scope.$on("user-logged-out", function(){
//update mainPage view data here eg. $scope.username = '';
});
我需要重新加载状态来使滚动条工作。当通过另一个状态-'注册'时,它们不起作用。如果在注册后强制关闭应用程序并再次打开,即直接进入“主页”状态,则滚动条将起作用。以上解决方案都无效。
当注册后,我替换了:
$state.go("home");
使用
window.location = "index.html";
应用程序已重新加载,滚动条正常工作。
我正在尝试使用AngularJS刷新页面,当我看到网站时感到困惑,但是没有代码可以工作,然后我找到了重新加载页面的解决方案。
$state.go('path',null,{reload:true});
在一个函数中使用这个,它会起作用。
cache:true
,则$state.go($state.current, {}, {reload: true});
无法正常工作。此问题已经在#ionic 1.0.0-RC2和1.0.0版本中测试过。请查看我的答案。 - ABCD.ca