在初始化控制器之前,我正在使用Angular ui-router,并为我的一个状态设置了一个解析函数。我检索一些数据,遍历并匹配URL,如果找到匹配,则将promise解析到控制器,并在promise中返回该对象。这一切都运行得很好。
但是,如果没有找到匹配,我只想通过拒绝promise并运行$state.go('state');
来重定向到一个不同的状态
简单地说:
deferred.reject();
$state.go('state',{params: 'param'});
但这似乎没有任何作用。控制器挂起了,我没有得到任何控制台错误或任何东西。有什么想法吗?
这个问题适用于版本0.xx,在版本1.xx中发生了很多变化
发布于 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()
函数。
发布于 2014-02-19 09:28:36
你误解了承诺是如何工作的。deferred.reject()
只是通知deferred.promise
它已被拒绝。
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(..)
}
)
https://stackoverflow.com/questions/21868219
复制相似问题