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

推薦する

MySqlは、外部ネットワーク接続クライアントの低速問題を解決するためにskip-name-resolveを使用します。

Tencent Cloud上に構築されたMySQLは、開発用コンピュータでNavicatを使用して...

Docker で Zookeeper をインストールする (スタンドアロンおよびクラスター)

Docker を起動したら、利用できるオプションを見てみましょう。 公式のものがある場合は、もちろ...

Vue での親子コンポーネント通信と、sync を使用して親子コンポーネント データを同期する

目次序文子コンポーネントは親コンポーネントにデータを渡す1. 親コンポーネントから子コンポーネントに...

Js でオブジェクトのディープ オブジェクトを安全に取得するメソッドの例

目次序文文章パラメータ例Lodash 実装:トーキー機能: castPath関数: stringTo...

CentOS に Docker をインストールし、Springboot で Docker をリモート公開する方法

目次1. CentOS7.0へのJDK1.8のインストール2. Dockerのインストール3.Doc...

Linux テキスト検索コマンド find の詳細な使用方法

find コマンドは主にディレクトリやファイルを検索するために使用され、一致のために複数のパラメータ...

Linux でソフトウェア パッケージのバージョンをアップグレードする方法の詳細な説明

Linux環境で、特定のソフトウェア(パッケージ)がインストールされているかどうかを確認したい。 r...

VueはPCカメラを呼び出して写真機能を実現します

この記事の例では、VueがPCカメラを呼び出して写真機能を実現する具体的なコードを参考までに共有して...

コマンドを使用してMySQLデータベース(de1)を作成する方法

1. MYSQLに接続するフォーマット: mysql -h ホストアドレス -u ユーザー名 -p ...

JavaScript 文字列の一般的なメソッドの詳細な説明

目次1. キャラクター文法パラメータ索引戻り値2. 連結文法パラメータ文字列2 [, …文字列N]戻...

1 つの記事で Apache Avro データを解析する

概要: この記事では、Avro データをシリアル化して生成し、FlinkSQL を使用して解析する方...

Linux で誤って削除したメッセージ ファイルを復元する方法

プロセスで使用されていて、誤って削除されたファイルがある場合、それらを回復することができます。プロセ...

ログインインターフェースの使いやすさとセキュリティのバランスをとる方法

ウェブデザイナーでもUIデザイナーでも、ログインページや登録ページのデザインは必ず経験しなければなら...

SQL Server の完全バックアップに関する珍しいエラーと解決策

1. エラーの詳細一度、データベース全体のバックアップを手動で実行したときに、次のエラーが発生しまし...

vue3.0+echarts は 3 次元の縦棒グラフを実現します

序文: Vue3.0はechartsの3次元縦棒グラフを実装します結果: 実装手順: 1. echa...