拒绝承诺Angular ui-router后的$状态转换 [英] $state transition after rejected promise Angular ui-router

查看:21
本文介绍了拒绝承诺Angular ui-router后的$状态转换的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 Angular ui-router 并在控制器初始化之前为我的一个状态设置了解析函数.我检索一些数据,循环遍历并将其与 URL stateParam 匹配,如果找到匹配项,则将承诺解析给控制器并在承诺中返回该对象.这一切都很好.

I'm using Angular ui-router and have a resolve function set up for one of my states, before the controller is initialized. I retrieve some data, loop through and match it up the URL stateParam, and if a match is found, resolve the promise to the controller and return that object in the promise. That's all working well.

但是,如果找不到匹配项,我只想通过拒绝承诺并运行 $state.go('state');

However, if a match isn't found I simply want to redirect to a different state by rejecting the promise and running $state.go('state');

简单的:

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

但这似乎没有任何作用.控制器只是挂起,我没有收到控制台错误或任何错误.有什么想法吗?

But this doesn't seem to do anything. The controller just hangs, and I get no console errors or anything. Any ideas?

这个问题适用于 0.xx 版,1.xx 版有很多变化

推荐答案

ui-router 应该在路由解析被拒绝时抛出 $stateChangeError.你需要注意这个事件,并在那里触发你的状态转换.

ui-router is supposed to throw a $stateChangeError if a route resolve is rejected. You need to watch for this event, and trigger your state transition there.

根据维基:

$stateChangeError - 在转换过程中发生错误时触发.重要的是要注意,如果您的解析函数中有任何错误(javascript 错误、不存在的服务等),它们传统上不会抛出.您必须监听此 $stateChangeError 事件才能捕获所有错误.

$stateChangeError - fired when an error occurs during transition. It's important to note that if you have any errors in your resolve functions (javascript errors, non-existent services, etc) they will not throw traditionally. You must listen for this $stateChangeError event to catch ALL errors.

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

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

As @gustavohenke mentioned in the comments, a good place to put this handler is your app's primary .run() function.

这篇关于拒绝承诺Angular ui-router后的$状态转换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆