我使用的是角ui路由器版本1.0.0-alpha.4 4,而且在默认情况下,根范围事件是不活动的,所以我想使用新的方式来实现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(“错误”),但似乎不起作用。有什么建议吗?
发布于 2016-05-01 05:35:21
真酷我找到了解决办法。把这个贴给任何可能想出同样问题的人。你所需要的就是像下面这样解决这个承诺。
deferred.resolve($state.target('error', undefined, { location: true }))发布于 2016-10-24 14:29:21
这可能会更简单,因为auth服务也与承诺一起工作。
只要返回服务,不要再创造另一个承诺。
如果您只对负情况感兴趣,则返回捕获阶段的状态。
.run(['$transitions', '$state', 'AuthService', ($transitions, $state, AuthService) => {
$transitions.onBefore(
{ to: 'app.*', from: '*' },
() => AuthService.isLoggedIn().catch(
() => $state.target('error', undefined, { location: true })
),
{priority: 10}
);
}])发布于 2017-02-16 00:04:46
要从TransitionHook函数重定向转换,可以返回TargetState或解析TargetState的承诺。
来自Ui-路由器文档的
当从TransitionHookFn或TransitionStateHookFn返回时,这些值会改变正在运行的转换: False:转换将被取消。 TargetState:转换将重定向到新的目标状态。 承诺:转换将等待承诺解决或拒绝。(见下文)
Anything :过渡将恢复
https://stackoverflow.com/questions/36962954
复制相似问题