在AngularJS UI路由器中有条件路由之前,如何解析异步请求?

在AngularJS UI路由器中有条件路由之前,如何解析异步请求?,angularjs,angular-ui-router,Angularjs,Angular Ui Router,这是我在关于Stack的几篇文章中讨论过的一个问题,但我还没有找到一个真正适合我的明确答案。我认为这是一个常见的问题,所以其他方法也可以 基本概念是,当用户访问站点时,我希望有条件地显示两种状态之一。我对外部服务器进行了API调用,以检查用户的会话是否处于活动状态。如果是,我可以转到“主页”,否则我转到“欢迎”页 问题是我不知道如何做到这一点 我最初的想法是在home状态中创建一个resolve对象,然后首先在那里解析api.isLoggedIn调用。这将暂停转换,以便我可以检查状态$state

这是我在关于Stack的几篇文章中讨论过的一个问题,但我还没有找到一个真正适合我的明确答案。我认为这是一个常见的问题,所以其他方法也可以

基本概念是,当用户访问站点时,我希望有条件地显示两种状态之一。我对外部服务器进行了API调用,以检查用户的会话是否处于活动状态。如果是,我可以转到“主页”,否则我转到“欢迎”页

问题是我不知道如何做到这一点

我最初的想法是在home状态中创建一个
resolve
对象,然后首先在那里解析
api.isLoggedIn
调用。这将暂停转换,以便我可以检查状态
$stateChangeStart
事件,然后在必要时调用
event.preventDefault

问题是onStateChangeStart在resolve方法之前被调用,因此我无法知道用户是否在状态更改之前登录

目前,我认为实现这一点的唯一方法是显示初始状态,其控制器将检查用户是否登录,然后根据响应手动调用状态更改


有更惯用的解决方案吗

改为使用$stateChangeSuccess,它将在解析后激发。您可以在那里使用$location更改路线。您尝试过使用吗?这可能对你的处境很有帮助。这听起来确实很完美!我已经推出了一个相当糟糕的解决方案,但我会在下一个项目中试用。如果你想把这个评论变成一个答案,我会接受的。