Vue-router は現在の場所 (/path) へのナビゲーションを許可しません。エラーの原因と修正

Vue-router は現在の場所 (/path) へのナビゲーションを許可しません。エラーの原因と修正

エラーメッセージ

現在の場所 ("/path") への移動は許可されていません

現在の場所 ("/path") への移動は許可されていません

原因

コンソールに上記のメッセージNavigating to current location ("/path") is not allowedが表示される場合、同じルートが繰り返し入力されているためです。

エラーのデモンストレーション

エラーを示すために、 vue-cliを使用して新しいプロジェクトを再構築し、按鈕input 1 つずつだけ記述しました。
コード:

<!-- vue テンプレート コード -->
<div>
	<button @click="gotoHandle">ルートジャンプをテストする</button>
	<input v-model="ルート名">
<div>
// ルーティングコードエクスポートデフォルト{
  データ() {
    戻る {
      ルート名: ''
    }
  },
  メソッド: {
    ハンドルへ移動() {
      this.$router.push({name: this.routeName})
    }
  }
}

アニメーションデモ

現在の場所 ("/path") への移動は許可されていません

同じルートを繰り返し入力すると (パスまたはルート名のいずれかで)、現在の場所 ( path ) へのナビゲーションが許可されないことを示すプロンプトが表示されます。たとえば、上記の例では、 Aboutという名前のルートを入力すると、プロンプトはpath: "/about"となり、現在の場所 ("/about") へのナビゲーションは許可されません。これは、ジャンプ方法が間違っているとエラー処理がキャプチャされないため、エラー情報が直接出力されるためです。

回避策

方法1

エラーが報告される場所に直接.catch(error => error)を追加します。

エクスポートデフォルト{
  データ() {
    戻る {
      ルート名: ''
    }
  },
  メソッド: {
    ハンドルへ移動() {
      this.$router.push({name: this.routeName}).catch(エラー => エラー)
    }
  }
}

方法2

エラーにジャンプするメソッドにグローバル エラー キャプチャを追加します。

'vue-router' から VueRouter をインポートします。

const routerPush = VueRouter.prototype.push
VueRouter.prototype.push = 関数 (場所) {
  routerPush.call(this, location).catch(error => error) を返します。
}

上記のコードは、 main.jsまたはrouter/index.jsで実行した場合、およびnew VueRouter前後で実行した場合と同じです。これはリセットされたVueRouterプロトタイプ オブジェクトのpushイベントであるため、プロトタイプ オブジェクトのpushイベントにキャプチャ例外が追加され、プロトタイプ チェーンを通じて関連するすべてのオブジェクトが変更されます。

replaceメソッドの重複ジャンプ エラーは上記と同様です。push push replace変更するだけです。

方法3

この方法をお勧めします。同じルートへの繰り返しジャンプを回避するために、ジャンプ ロジックを最適化することをお勧めします。

Vue-router が現在の場所 (/path) へのナビゲーションを許可しないエラーの原因と修正に関するこの記事はこれで終わりです。Vue-router の現在の場所へのナビゲーションに関するその他の関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • vue3.x+vite+element-ui+vue-router+vuex+axios を使用してプロジェクトをビルドします
  • 非常に詳細な Vue-Router のステップバイステップのチュートリアル
  • vue-router のハッシュモードと履歴モードの違い
  • Vue-Routerのインストールと使用方法の詳細な説明
  • vue3 で vue-router を使用するための完全な手順
  • Vue-router ルーティングの遅延読み込みとそれを実装する 3 つの方法
  • Vue-routerのハッシュモードと履歴モードの違いの詳細な説明
  • vue-routerはメタ情報メタ操作を定義します
  • vue3.0+vue-router+element-plusの初期練習
  • vue-routerのナビゲーションフック(ナビゲーションガード)の詳しい説明
  • Vue-Routerのインストールプロセスと原理の詳細

<<:  1行のコードでLinuxのプロセスを隠す方法を学ぶ

>>:  MySQL 8.0 の新機能の分析 - トランザクション データ ディクショナリとアトミック DDL

推薦する

ウェブデザイナーのための超便利なツール 50 選

ウェブデザイナーになるのは簡単ではありません。デザインやアーキテクチャを考慮するだけでなく、さまざま...

IE で UTF8 エンコードされたページで行が理由もなく空白のままになり、UTF8 ページが表示されない問題の解決方法

理由は、すべてのファイルが utf8 でエンコードされているためです。ファイルがインクルードされると...

Linux でスレッドを作成するための pthread_create の具体的な使用法

pthread_create関数機能紹介pthread_createはUNIX環境のスレッド作成関数...

DockerにNginxをインストールする方法

DockerにNginxをインストールするNginx は、IMAP/POP3/SMTP サービスも提...

トークンの有効期限が切れたときにページを更新するときに繰り返しプロンプトが表示されないようにする Vue について

トークンの有効期限が切れたら、ページを更新します。ページの読み込み時にバックエンドに複数のリクエスト...

Baidu デッドリンクファイルを作成する方法

Baidu によって定義されているデッドリンク形式には 2 種類あります。 1: XML形式のデッド...

Linux で指定されたフォルダの各サブフォルダ内のファイル数を表示する

カウントスクリプト #!/bin/sh 引数の数=$# [ $numOfArgs -ne 1 ]の場...

CSS のマージンの崩壊問題を解決する方法

まず、マージン崩壊が発生する 3 つの状況を見てみましょう。 1. 隣接する 2 つのブロックレベル...

Centos 7にmysql5.7.24バイナリバージョンをインストールする方法と解決方法

MySQLバイナリのインストール方法mysqlをダウンロード参考: 1. パッケージを解凍する ta...

フォーム要素の簡単な実装コードでは登録を例に挙げています

コード実装:コードをコピーコードは次のとおりです。 <!DOCTYPE html> &l...

方言変換のためのApache Calciteコード

意味Calcite は、Sql を SqlNode に解析し、次に SqlNode を特定のデータベ...

よく理解しましたかタグ 定義方法 使用方法

序文:今日、「<!DOCTYPE> タグを注意深く理解しましたか?」と尋ねられました。私...

MySQL マスタースレーブレプリケーションの原理と注意点

前面に書かれた最近、Mycat で特別なトピックを書いています。最近、多くの友人が面接に出かけている...

docker ベースで Prometheus+Grafana を構築する手順の詳細説明

1. プロメテウスの紹介Prometheus は、もともと SoundCloud によって開発された...

vue backtop コンポーネントを実装するための完全なコード

効果: コード: <テンプレート> <div class="back-t...