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

推薦する

VMware15 仮想マシン ブリッジ モードでインターネットにアクセスできない問題の解決方法

説明 ソリューションVMware 15 仮想マシン ブリッジ モードではインターネットにアクセスでき...

JS配列の次元削減のいくつかの方法の詳細な説明

2次元配列の次元削減配列インスタンスメソッド concat と ES6 スプレッド演算子を使用した次...

HTML のオートコンプリートを無効にして履歴を表示しないようにする

入力ボックスには、コンテンツを入力するときに常に入力履歴が表示されます。これを無効にする現在の方法は...

MySQLスタートアップが起こした事故の実録

目次背景MySQLが完全に起動したかどうかを確認する方法事故最初の変更2回目の改訂要約するMySQL...

CSS3 FlexBox の伸縮自在なレイアウトを 10 分で理解する

基本的な紹介特徴Flexbox は、よりシンプルで効率的なレイアウト方法を提供する CSS 表示タイ...

MySQL curdate() 関数の詳細な例

MySQL CURDATE関数の紹介文字列コンテキストまたは数値コンテキストの YYYMMDD 形式...

レスポンシブフレームワークのテーブルヘッダーの自動改行問題に対する簡単な解決策

最近、Bootstrap を使って Web サイトを開発しています。表を処理していたところ、PC で...

すべてまたは逆の選択機能を実現するJavaScript

この記事では、全選択または選択を反転する機能を実現するためのJavaScriptの具体的なコードを参...

実行中の時計を実装するための純粋な CSS3 コード

操作効果コードの実装html <div id="ウォッチ"> <...

Node.js とブラウザのグローバル オブジェクトの違いの概要

Node.js では、.js ファイルは完全なスコープ (モジュール) です。したがって、var に...

MySQL シリーズ 6 のユーザーと認証

目次チュートリアルシリーズ1. ユーザー管理1. ユーザーアカウント2. アカウントの追加と削除3....

Linux システムで crontab を使用して MySQL データベースを定期的にバックアップする方法

システムの crontab を使用して定期的にバックアップ ファイルを実行し、バックアップ結果を日付...

Dockerを使用してサーバー上で複数のPHPバージョンを実行する

PHP7 がリリースされてからかなり時間が経ちますが、パフォーマンスが大幅に向上したことはよく知られ...

JavaScriptはスライダーを介してWebページの色を変更することを実装します

みなさんこんにちは、今日はウェブフロントエンドのHTMLを見ていたら、inputタグのtype属性が...

親要素に対する CSS 子要素の配置の実装

解決親要素に position:relative を追加します。子要素に position:abso...