Angularjs $locationChangeStart上的event.preventDefault()不';I don’我没有按预期工作

Angularjs $locationChangeStart上的event.preventDefault()不';I don’我没有按预期工作,angularjs,angular-component-router,Angularjs,Angular Component Router,我在为$locationChangeStart事件调用e.preventDefault内部处理程序时遇到了一个奇怪的问题。我有这样的想法: var unregisterCallback = _this.$rootScope.$on('$locationChangeStart', function (e) { e.preventDefault(); }); 这是在其中一个方向的链接函数中发生的。问题是,当我单击带有某个路径的锚元素时,它实际上会导航到它,然后返回。 我正在使用Angula

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

var unregisterCallback = _this.$rootScope.$on('$locationChangeStart', function (e) {
    e.preventDefault();
});
这是在其中一个方向的链接函数中发生的。问题是,当我单击带有某个路径的锚元素时,它实际上会导航到它,然后返回。
我正在使用Angular 1.5中的组件路由器。这几乎使这个usless,因为我试图显示一个确认对话框之前,用户nagivates离开,而不保存更改。问题是,由于这种重新导航,他无论如何都会丢失所有的更改。知道发生了什么吗?

在代码中,您试图阻止$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
                });
            }
        }
   };
});

在代码中,您试图阻止$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
                });
            }
        }
   };
});
你的“链接”不是链接(只是文本)。此外,锚点还有一个ng href属性,用于指定导航到的路径。您的“链接”不是链接(只是文本)。此外,锚点还有一个ng href属性,用于指定要导航到的路径。