在状态更改时将用户重定向到主页(无限循环错误)
Redirecting user to home page on state change (infinite loop error)
我正在使用 UI 路由器和 Firebase。交易完成后,用户将被重定向到感谢页面。一段时间后,会话结束,用户自动重定向到主页。
如果用户在此之前尝试离开感谢页面(例如,通过单击后退按钮),我想自动将用户重定向到主页。目标是然后拥有一个未经身份验证的干净应用程序。
当我使用以下代码时,出现最大堆栈大小错误:
.run(['$rootScope', 'Auth', '$state', function($rootScope, $location, Auth, $state) {
$rootScope.$on('$stateChangeStart',
function (event, toState, toParams, fromState) {
if (fromState.name === 'thankyou' && toState.name !== 'thankyou') {
event.preventDefault();
Auth.$unauth();
$state.go('home');
}
})
}])
问题
包裹 $state.go
行的条件将无条件捕获自身。
例子
- 我们尝试从谢谢页面导航到某个未指定的位置
- 条件抓住了我们。我们在 谢谢你 页面,我们不会去 谢谢你 页面。最好将我们发送到主页。
- 嘿,我们又来了,试图从谢谢页面导航到主页。会出什么问题?
- 哦不!这种情况再次抓住了我们。我们在 谢谢 页面上,但我们要去 主页 。那不是谢谢页面,所以我们必须到主页...
- 这个循环永远持续下去...
解决方案
将条件更改为:
if (fromState.name === 'thankyou' && toState.name !== 'home')
我正在使用 UI 路由器和 Firebase。交易完成后,用户将被重定向到感谢页面。一段时间后,会话结束,用户自动重定向到主页。
如果用户在此之前尝试离开感谢页面(例如,通过单击后退按钮),我想自动将用户重定向到主页。目标是然后拥有一个未经身份验证的干净应用程序。
当我使用以下代码时,出现最大堆栈大小错误:
.run(['$rootScope', 'Auth', '$state', function($rootScope, $location, Auth, $state) {
$rootScope.$on('$stateChangeStart',
function (event, toState, toParams, fromState) {
if (fromState.name === 'thankyou' && toState.name !== 'thankyou') {
event.preventDefault();
Auth.$unauth();
$state.go('home');
}
})
}])
问题
包裹 $state.go
行的条件将无条件捕获自身。
例子
- 我们尝试从谢谢页面导航到某个未指定的位置
- 条件抓住了我们。我们在 谢谢你 页面,我们不会去 谢谢你 页面。最好将我们发送到主页。
- 嘿,我们又来了,试图从谢谢页面导航到主页。会出什么问题?
- 哦不!这种情况再次抓住了我们。我们在 谢谢 页面上,但我们要去 主页 。那不是谢谢页面,所以我们必须到主页...
- 这个循环永远持续下去...
解决方案
将条件更改为:
if (fromState.name === 'thankyou' && toState.name !== 'home')