在状态更改时将用户重定向到主页(无限循环错误)

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')