1

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

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

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

4

1 回答 1

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
                });
            }
        }
   };
});
于 2016-07-07T09:28:14.757 回答