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
});
}
}
};
});