当前位置: 首页 > 面试题库 >

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

邹慈
2023-03-14
问题内容

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

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

简单地说:

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

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

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


问题答案:

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

根据维基:

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

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

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



 类似资料:
  • 问题内容: 我需要创建链式承诺: 如果我将errorCallback放在第一个中,则第二个将被解析,并调用其successCallback。但是,如果我删除了,那么第二个承诺将被拒绝。 根据Angular JS的文档,传播拒绝的唯一方法是返回并且它看起来并不明显,尤其是因为即使不需要它,我也必须注入服务。 也可以通过在中引发异常来完成此操作,但是它将异常跟踪写入控制台,这不好。 还有另一种选择可以

  • 问题内容: 我已经阅读了几篇有关该主题的文章,但是我仍然不清楚是否与抛出错误之间有区别。例如, 使用Promise.reject 使用抛出 我倾向于仅使用它,因为它更短,但我想知道一个相对于另一个是否有任何优势。 问题答案: 使用一个相对于另一个没有优势,但是,在特定情况下无法使用。但是,这些情况可以解决。 每当您进入promise回调时,都可以使用。但是,如果您在任何其他异步回调中,则必须使用。

  • 问题内容: 我在理解为什么拒绝不通过承诺链传递时遇到问题,我希望有人能够帮助我理解原因。对我而言,将功能附加到承诺链上意味着我有意要实现的原始承诺。很难解释,所以让我先显示我的问题的代码示例。(注意:此示例使用的是Node和延迟的节点模块。我使用Dojo 1.8.3对此进行了测试,并得到了相同的结果) 运行此操作的结果是以下输出: 好吧,对我来说,这个结果没有道理。通过附加到该承诺链,每个人都暗示

  • 问题内容: 我在理解为什么拒绝不通过承诺链传递时遇到问题,我希望有人能够帮助我理解原因。对我来说,将功能附加到承诺链上意味着我有意要实现的原始承诺。很难解释,所以让我先显示我的问题的代码示例。(注意:此示例使用的是Node和延迟的节点模块。我使用Dojo 1.8.3对此进行了测试,并得到了相同的结果) 运行此操作的结果是以下输出: 好吧,对我来说,这个结果没有意义。通过附加到这个承诺链,每个人都暗

  • 问题内容: 我正在尝试用正确的方法表示正确的方法,以指示内发生故障。 如果诺言没有失败,(即返回诺言的操作是否正常工作,例如返回状态200的AJAX请求),但是我认为结果无效,通常我会这样做弹出窗口,向用户说明问题,然后执行“返回假”;尽早退出该方法。 但是,有了承诺,如果我想从.then()内部做类似的事情,我就被引导去相信我应该做的是抛出一个错误,而应该让它被.catch()抓住。 ),我已经

  • 可以通过从模型钩子返回promise来暂停转换。 通过从模型返回普通对象或数组,可以立即完成转换。 语法 (Syntax) Ember.Route.extend ({ model() { return new Ember.RSVP.Promise(function(param) { //code here }); } }); 例子 (Exam