LocationChangeStart事件preventDefault无法正常工作

时间:2017-08-22 20:22:13

标签: angularjs

我尝试使用以下代码阻止导航到某个网址

run(['$rootScope', '$location', function ($rootScope,$location) {
        $rootScope.$on('$locationChangeStart', function (event, next, current) {
            if (next) {
                if (isProhibetedUrl(next)) {
                    event.preventDefault();
                }
            }
        });

但它不起作用,我输入了10个摘要的循环。我也试过$ routeChangeStart也没有成功。

2 个答案:

答案 0 :(得分:0)

这是我如何使用$ routeStartChange。这是在您定义模块之后。

app.run(['$rootScope', '$location',function ($rootScope, $location) {
    $rootScope.$on('$routeChangeStart', function (event) {
        if (!permitted) {    // your check
        event.preventDefault();
    }
});

另外一定要确保' angular-route.js'包含在你的html中,并在模块定义中注入依赖。

var app = angular.module('myapp', ['ngRoute',.....

答案 1 :(得分:0)

它完美无缺。请参考下面的plunkr。尝试将相同的内容应用于您的代码。

Plunkr: here

所以,只是一些问题,如果条件满足就进入if条件,你可以做一个console.log并检查条件。如果没有,那么尝试发布一个JSfiddle或Plunkr只是要解决的问题,它将很容易调试。感谢。

<强>代码:

    app.run(function($rootScope, $location) {
      //when the route is changed scroll to the proper element.
      $rootScope.$on("$locationChangeStart", function(event, next, current) {
        console.log(event);
        console.log(next);
        console.log(current);
        if(next.indexOf("two") !== -1){
          console.log("preventing default");
          event.preventDefault();
        }
      });
    });

<强>解释

检查下一个路由是否存在关键字two,如果存在,则该事件将从传播中停止。如果输入了if条件,请检查控制台。