$ locationChangeStart上的event.preventDefault()没有按预期工作

时间:2016-07-07 09:16:50

标签: angularjs angular-component-router

我在调用$ locationChangeStart事件的处理程序内部的e.preventDefault时遇到了一个奇怪的问题。我有这样的事情:

var unregisterCallback = _this.$rootScope.$on('$locationChangeStart', function (e) {
    e.preventDefault();
});

这是在其中一个方向的链接函数中发生的。问题是,当我点击一个带有某个路径的锚元素时,它实际上导航到它然后返回。 我使用Angular 1.5的组件路由器。这几乎使得这无用,因为我试图在用户不加保留更改之前显示确认对话框。问题是,由于这种重新导航,他无论如何都会失去所有的变化。知道发生了什么吗?

1 个答案:

答案 0 :(得分:0)

在代码中,您试图阻止$ locationChangeStart中的默认事件,但您不希望在单击anchor()标记时导航到新页面。在这种情况下,您可以删除href ="#"在锚标签中并按照以下方法

链接

另一种阻止所有锚标记的默认操作的方法,你可以指令这样做

 app.directive('a', function() {
    return {
        restrict: 'E', // restricts to html elment
        link: function(scope, elm, attrs) {
            if(attrs.ngClick || attrs.href === '' || attrs.href === '#'){
                elm.on('click', function(ev){
                    ev.preventDefault(); // prevents the default functionality of the tag
                });
            }
        }
   };
});