首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角UI路由器$transitions.onBefore

角UI路由器$transitions.onBefore
EN

Stack Overflow用户
提问于 2016-05-01 04:10:16
回答 3查看 8.2K关注 0票数 6

我使用的是角ui路由器版本1.0.0-alpha.4 4,而且在默认情况下,根范围事件是不活动的,所以我想使用新的方式来实现auth机制,如下所示。

代码语言:javascript
复制
.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(“错误”),但似乎不起作用。有什么建议吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-05-01 05:35:21

真酷我找到了解决办法。把这个贴给任何可能想出同样问题的人。你所需要的就是像下面这样解决这个承诺。

代码语言:javascript
复制
deferred.resolve($state.target('error', undefined, { location: true }))
票数 3
EN

Stack Overflow用户

发布于 2016-10-24 14:29:21

这可能会更简单,因为auth服务也与承诺一起工作。

只要返回服务,不要再创造另一个承诺。

如果您只对负情况感兴趣,则返回捕获阶段的状态。

代码语言:javascript
复制
.run(['$transitions', '$state', 'AuthService', ($transitions, $state, AuthService) => {
  $transitions.onBefore(
    { to: 'app.*', from: '*' },
    () => AuthService.isLoggedIn().catch(
        () => $state.target('error', undefined, { location: true })
    ),
    {priority: 10}
  );
}])
票数 3
EN

Stack Overflow用户

发布于 2017-02-16 00:04:46

要从TransitionHook函数重定向转换,可以返回TargetState或解析TargetState的承诺。

来自Ui-路由器文档

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

  • 如果承诺被拒绝(或决定为假),则过渡将被取消。
  • 如果承诺解析为TargetState,则转换将被重定向。
  • 如果这个承诺决定了其他任何事情,过渡就会恢复。

Anything :过渡将恢复

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36962954

复制
相关文章

相似问题

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