2016-05-01 139 views
4

我使用的是角度ui路由器版本1.0.0-alpha.4,因为默认情况下root作用域事件处于非活动状态我想用如下实现auth机制的新方法。

.run(['$transitions', '$timeout', '$q', '$state', 'AuthService', ($transitions, $timeout, $q, $state, AuthService) => { 
    $transitions.onBefore({ to: 'app.*', from: '*' },() => { 
    const deferred = $q.defer(); 
    AuthService.isLoggedIn().then(() => { 
     deferred.resolve() 
    },() => { 
     // redirect to error page 
     // how can i redirect user to error page. $state.go('error') not working. 
     deferred.reject() 
    }); 
    return deferred.promise; 
    }, {priority: 10}); 
}]) 

但问题是,我不知道如何将用户重定向到错误页面。我尝试使用$ state.go('错误'),似乎无法正常工作。有什么建议么?

+0

什么是错误信息?你有没有指定错误状态的路由? –

+0

@DannyPranoto是的。我有,也没有错误消息。我使用$ stateChangeStart完成了同样的操作,默认情况下可以使用0.2.X版本,并且一切正常。 – fernando

+0

@fernando你知道我在哪里可以找到关于v1.0.0-aplha的文档吗? – AjaxLeung

回答

3

酷我找到了解决方案。发布给任何可能提出相同问题的人。你所需要的只是解决承诺如下。

deferred.resolve($state.target('error', undefined, { location: true })) 
2

它可能会更简单,因为身份验证服务也承诺与承诺。

只需返回服务,不要创建另一个承诺。

如果您只是对消极情况感兴趣,则会在收集阶段返回状态。

.run(['$transitions', '$state', 'AuthService', ($transitions, $state, AuthService) => { 
    $transitions.onBefore(
    { to: 'app.*', from: '*' }, 
    () => AuthService.isLoggedIn().catch(
     () => $state.target('error', undefined, { location: true }) 
    ), 
    {priority: 10} 
); 
}]) 
+0

谢谢你。文档不完整! – CountZero

1

重定向从TransitionHook功能,你可以返回TargetState或解决了一个TargetState承诺的过渡。

从UI-路由器Docs

当从TransitionHookFn或TransitionStateHookFn返回,这些值改变运行过渡:
:过渡将被取消。
TargetState:转换将被重定向到新的目标状态。
承诺:过渡将等待承诺解决或拒绝。 (见下文)

  • 如果承诺被拒绝(或解析为false),过渡将被取消
  • 如果承诺解析为TargetState,过渡将被重定向
  • 如果承诺解析为别的,过渡将恢复

别的:过渡将恢复