【问题标题】:Getting href value during route change in Angular在Angular中的路线更改期间获取href值
【发布时间】: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


【解决方案1】:

好的,我这样解决了:我删除了默认重定向:

  //$routeProvider.otherwise({redirectTo: '/login'});

我在 routeChangeStart 监听器上插入了这个条件:

    if (typeof(next) !== 'undefined'){
        // old code
    } else {
        event.preventDefault();
    }

【讨论】:

    【解决方案2】:

    您可以使用指令覆盖 href

    app.directive('href', function () {
            return {
                restrict: 'A',
                priority:100,
                compile: function (element, attrs) {
                    if (attrs.href && attrs.href.indexOf('tab') > 0) {
                        element.removeAttr('href'); // do nothing
                    }
                }
            }
        });
    

    【讨论】:

    • 谢谢我添加了你的代码,现在重定向没有被触发。问题是我不能再改变标签了!
    • 你必须根据你应该使用 href 属性添加条件,而不是在所有情况下
    • 你只能把你的run块逻辑放在这里
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 2021-01-10
    相关资源
    最近更新 更多