首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >拒绝promise Angular ui路由器后的$state转换

拒绝promise Angular ui路由器后的$state转换
EN

Stack Overflow用户
提问于 2014-02-19 08:01:48
回答 2查看 21.5K关注 0票数 18

在初始化控制器之前,我正在使用Angular ui-router,并为我的一个状态设置了一个解析函数。我检索一些数据,遍历并匹配URL,如果找到匹配,则将promise解析到控制器,并在promise中返回该对象。这一切都运行得很好。

但是,如果没有找到匹配,我只想通过拒绝promise并运行$state.go('state');来重定向到一个不同的状态

简单地说:

代码语言:javascript
复制
deferred.reject();
$state.go('state',{params: 'param'});

但这似乎没有任何作用。控制器挂起了,我没有得到任何控制台错误或任何东西。有什么想法吗?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-19 09:35:42

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

根据维基百科:

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

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

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

票数 31
EN

Stack Overflow用户

发布于 2014-02-19 09:28:36

你误解了承诺是如何工作的。deferred.reject()只是通知deferred.promise它已被拒绝。

代码语言:javascript
复制
var promise = deferred.promise;

promise.then(
  function (result) { 
    // this function runs if the promise was resolved
  },
  function (result) {
    // this function runs if the promise was rejected
    // this is where you should put $state.go(..)
  }
)
票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21868219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档