2016-07-07 6 views
1

$ locationChangeStartイベントのハンドラ内でe.preventDefaultを呼び出すのに奇妙な問題があります。私は次のようなものを持っています:

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

これは、指示の1つのリンク機能で起こります。問題は、あるパスでアンカー要素をクリックすると、実際にアンカー要素に移動してから戻ってくることです。 Angular 1.5のコンポーネントルータを使用しています。これは、ユーザーが変更を保存せずに消え去る前に確認ダイアログを表示しようとしているので、これはほとんど役に立たない。事は、この再ナビゲーションのために、彼はすべての変更をとにかく緩めています。何が起きているのか?

答えて

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

あなたの「リンク」はリンクではありません(テキストのみ)。また、アンカーには、ナビゲートするパスを指定するng-href属性があります。 – Botis

関連する問題