【发布时间】:2016-05-10 04:55:57
【问题描述】:
我正在构建一个 Angular 应用程序,我使用这段代码在路由更改期间检查身份验证和其他内容:
run(['$rootScope', '$location', 'Session', function ($rootScope, $location, Session) {
$rootScope.$on('$routeChangeStart', function (event, next) {
if (Session.userId != null && next.$$route.originalPath.indexOf('login') > 0){
console.log('already logged, redirect to appointments');
$location.path('/appointments');
}
if (next.data.needAuth) {
if (Session.userId == null){
console.log('DENY');
event.preventDefault();
$location.path('/login');
}
}
else {
console.log('ALLOW');
}
});
}]).
问题是我在 html 代码中使用了一些选项卡,如下所示:
<li role="presentation"><a href="#tab1" aria-controls="home" role="tab" data-toggle="tab"> <span class="icon s7-smile"></span></a></li>
<li role="presentation"><a href="#tab4" aria-controls="settings" role="tab" data-toggle="tab"> <span class="icon s7-ticket"></span></a></li>
<li role="presentation"><a href="#tab3" aria-controls="messages" role="tab" data-toggle="tab"> <span class="icon s7-help2"></span></a></li>
结果是,当我按下它们时,选项卡会发生变化,但也会触发重定向。有一种方法可以获取 href 的值并执行以下操作:
if (href.value.indexOf("tab") > 0)
//do nothing
【问题讨论】:
-
这不是提供者/拦截器进来的地方吗?
-
你能更好地解释一下自己吗?我不明白你的意思:(
-
没关系,尝试使用
event.stopPropagation()而不是prevendDefault
标签: javascript angularjs routes