1

$locationChangeStart イベントのハンドラー内で e.preventDefault を呼び出すと、奇妙な問題が発生します。私はこのようなものを持っています:

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

これは、ディレクティブの 1 つのリンク関数で発生します。問題は、何らかのパスでアンカー要素をクリックすると、実際にそこに移動してから戻ることです。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 に答える