我正在使用Angular ui路由器,并在初始化控制器之前为我的一种状态设置了resolve函数。我检索一些数据,遍历并将其与URL stateParam进行匹配,如果找到匹配项,则将诺言解析为控制器,并在诺言中返回该对象。一切都很好。
但是,如果找不到匹配项,我只是想通过拒绝承诺并运行来重定向到其他状态 $state.go('state');
$state.go('state');
简单地说:
deferred.reject(); $state.go('state',{params: 'param'});
但这似乎无济于事。控制器只是挂起,我没有控制台错误或任何东西。有任何想法吗?
这个问题适用于版本0.xx,在版本1.xx中发生了很多变化
$stateChangeError如果拒绝路由解析,则ui-router应该抛出。您需要注意此事件,并在那里触发状态转换。
$stateChangeError
根据维基:
$stateChangeError-在过渡期间发生错误时触发。重要的是要注意,如果您的resolve函数中有任何错误(javascript错误,不存在的服务等),它们通常不会抛出。您必须侦听此$ stateChangeError事件以捕获所有错误。
https://github.com/angular-ui/ui-router/wiki#wiki-state-change- events
正如@gustavohenke在评论中提到的,放置此处理程序的好地方是应用程序的主要.run()功能。
.run()