使用onEnter重定向到状态时,如果新状态是当前状态的子级,则会发生无限循环。
例:
$stateProvider .state 'inventory', url: '/inventory' templateUrl: 'views/inventory.html' controller: 'InventoryCtrl' onEnter: () -> $state.go 'inventory.low' .state 'inventory.low', url: '/low' templateUrl: 'views/inventory-table.html' controller: 'LowInventoryCtrl'
什么时候:
$state.go 'inventory.low'
被调用后,状态inventory被重新初始化,导致其被再次调用=无限循环。
inventory
但是,如果重定向状态为:
$state.go 'otherStateThatIsNotAChild'
不会发生此问题。我假设父状态正在重新初始化,但是为什么呢?
.go
1)为什么在子状态上调用.go时会重新初始化父状态?
在进行过渡时,任何$ state.go / transitionTo都将导致 当前进行中的 过渡被取代。被取代的进程中转换将立即取消。由于在inventory调用所有状态的onEnters时尚未完成向原始过渡的转换,因此取消了原始过渡,并从先前处于活动状态的状态开始了 新的 过渡inventory.low。
inventory.low
参见ui-router src https://github.com/angular-ui/ui- router/blob/master/src/state.js#L897 …
2)那么,您将如何处理重定向到子状态?
你可以…
$state.go
$timeout()
无论如何,请务必确保您的应用程序这样重定向。如果用户直接导航到清单的其他任何子状态(例如inventory.high),则重定向仍会发生,从而迫使他们达到inventory.low原定的目的。
inventory.high