一尘不染

拒绝承诺Angular UI路由器后的$ state过渡

angularjs

我正在使用Angular ui路由器,并在初始化控制器之前为我的一种状态设置了resolve函数。我检索一些数据,遍历并将其与URL
stateParam进行匹配,如果找到匹配项,则将诺言解析为控制器,并在诺言中返回该对象。一切都很好。

但是,如果找不到匹配项,我只是想通过拒绝承诺并运行来重定向到其他状态 $state.go('state');

简单地说:

deferred.reject();
$state.go('state',{params: 'param'});

但这似乎无济于事。控制器只是挂起,我没有控制台错误或任何东西。有任何想法吗?

这个问题适用于版本0.xx,在版本1.xx中发生了很多变化


阅读 199

收藏
2020-07-04

共1个答案

一尘不染

$stateChangeError如果拒绝路由解析,则ui-router应该抛出。您需要注意此事件,并在那里触发状态转换。

根据维基:

$stateChangeError-在过渡期间发生错误时触发。重要的是要注意,如果您的resolve函数中有任何错误(javascript错误,不存在的服务等),它们通常不会抛出。您必须侦听此$
stateChangeError事件以捕获所有错误。

https://github.com/angular-ui/ui-router/wiki#wiki-state-change-
events


正如@gustavohenke在评论中提到的,放置此处理程序的好地方是应用程序的主要.run()功能。

2020-07-04