【发布时间】:2018-05-30 17:32:13
【问题描述】:
如果用户未登录,我的 AngularJs 应用程序应该转到登录页面并尝试加载需要登录用户的路径。
if ($localStorage.globals.access_token) {
$rootScope.globals = $localStorage.globals;
$state.go('app.dashboard-v1');
}else{
$state.go('access.signin)
}
每当应用加载时,这段代码就会执行。问题是当我试图进入需要登录用户的路径时,它没有重定向到登录页面,而是进入了该特定路径。更令人困惑的是它开始将状态更改为登录页面(access.signin)但从未成功然后启动特定路径(这里我尝试通过其 url 访问 app.dashboad-v1 状态)然后成功。我在这里做错了什么?
【问题讨论】:
-
你能告诉我们 if 语句是如何被触发的吗?
-
通常通过向状态的解析器函数返回一个被拒绝的承诺来中止需要登录用户的路径。使用 UI-Router 0.x 的
$stateChangeError错误事件转到登录页面。对于 UI Router 1.x,使用转换挂钩。见UI-Router Wiki - State Change Events。 -
@BShaps 我将用户凭据存储在附加到 $localstorage 的密钥中。在注销时,该键被清除为空对象,因此一旦重新加载路径,此“IF”条件评估为假,因为没有名为“access_token”的键。
标签: javascript angularjs routing angular-ui-router