1. ホーム
  2. javascript

[解決済み] AngularJs - ルート変更イベントのキャンセル

2023-04-03 13:15:25

質問

AngularJsでルート変更イベントをキャンセルするにはどうすればよいですか?

私の現在のコードは

$rootScope.$on("$routeChangeStart", function (event, next, current) {

// do some validation checks
if(validation checks fails){

    console.log("validation failed");

    window.history.back(); // Cancel Route Change and stay on current page  

}
});

を使うと、たとえバリデーションが失敗しても、Angularは次のテンプレートと関連するデータを取得し、すぐに前のビュー/ルートに切り替わります。私は、バリデーションが失敗した場合、angularが次のテンプレートとamp;データをプルすることを望んでいません。私はさらにevent.preventDefault()を試しましたが、使用できません。

どのように解決するのですか?

の代わりに $routeChangeStart を使う $locationChangeStart

以下はangularjsの人たちのそれに関する議論です。 https://github.com/angular/angular.js/issues/2109

2018/3/6編集 ドキュメントに記載されています。 https://docs.angularjs.org/api/ng/service/$location#event-$locationChangeStart

$scope.$on('$locationChangeStart', function(event, next, current) {
    if ($scope.form.$invalid) {
       event.preventDefault();
    }
});