event.preventDefault() в $locationChangeStart не работает должным образом

У меня странная проблема с вызовом внутри обработчика e.preventDefault для события $locationChangeStart. У меня есть что-то вроде этого:

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

Это происходит в функции ссылки для одной из директив. Проблема заключается в том, что когда я щелкаю элемент привязки с некоторым путем, он фактически переходит к нему, а затем обратно. Я использую компонентный маршрутизатор от Angular 1.5. Это в значительной степени делает это бесполезным, так как я пытаюсь показать диалоговое окно подтверждения, прежде чем пользователь удалится без сохранения изменений. Дело в том, что из-за этой повторной навигации он все равно теряет все изменения. Есть идеи, что происходит?

1 ответ

В коде вы пытаетесь предотвратить событие по умолчанию в $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
                });
            }
        }
   };
});
Другие вопросы по тегам