4

サーバー側のリソースが必要routeです。resolveそのリソースは認証を要求します。そのため、キャンセル可能なログインフォームポップアップを表示します。キャンセルすると、ルート/解決が正しく取得rejectedおよび起動されます。$routeChangeError

問題は、アドレスバーに失敗した場所/URL と不要な履歴エントリがあることです。

リロードせずに現在の場所の URL を最後のものに置き換えるにはどうすればよいですか? また、ルート変更が失敗した後、現在の履歴エントリを削除するにはどうすればよいでしょうか?

編集: angular-http-auth を使用します。これが私のルーティングです:

/home> /item(認証が必要なリソースを解決する必要があります。ログイン フォームにログインしていない場合、キャンセル可能なポップアップが開きます)

認証をキャンセルすると、$routeChangeError が発生し、レンダリングされない/home ためにまだページにいます。/itemアドレス バーに間違った URL が表示されるようになりました。/item

4

1 に答える 1

2

履歴の 1 ステップ分を送り返すだけです。履歴レコードがそこにあることを心配する必要はありません。次の項目に移動すると上書きされます。

app.run(function($rootScope, $window) {
   $rootScope.$on('$routeChangeError', function () {
      $window.history.back();
   });
});

そして、ここにデモプランクがあります

于 2014-01-28T20:59:16.060 に答える