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

推薦する

js 正規表現の先読みと後読み、および非キャプチャグループ化

目次先読みと後読みをキャプチャグループと組み合わせる捕獲グループと非捕獲グループ前を向いて、後ろを振...

Ubuntu 16.04 サーバーで MySQL を設定し、リモート接続を有効にする方法

背景最近、Node.js を勉強しているのですが、クラウド サーバーがあることを思い出しました。しか...

MySQLにおける時刻日付型と文字列型の選択について

目次1. DATETIMEとTIMESTAMPの使用1. 類似点2. 相違点3. 選択2. varc...

CSSは複数の要素をボックスの両端に揃える効果を実現します

要素の両端を揃える配置レイアウトは、実際の開発のいたるところで見られます。これは、フレックスレイアウ...

MySQL アクティブ-アクティブ同期レプリケーションの 4 つのソリューションの詳細な説明

目次MySQLネイティブレプリケーションに基づくマスター-マスター同期ソリューションGaleraレプ...

Linux のような環境で jdk1.8 をインストールし、環境変数を設定する方法の詳細な説明

設定は非常にシンプルですが、毎回確認しないといけないので、記録だけ残しておきます。 1. インストー...

Squid を使用して http および https 用のプロキシ サーバーを構築する方法

nginx を導入した際に、フォワードプロキシの設定も nginx を使っていました。しかし、htt...

MySQL共通インデックスとユニークインデックスの選択に関する詳細な分析

各人が固有の携帯電話番号で登録し、ビジネス コードによって重複する携帯電話番号が 2 つ書き込まれな...

Dockerは指定されたメモリで操作を実行します

次のように: -m, --memory メモリ制限。形式は数値と単位です。単位は b、k、m、g の...

MySQLデータ復旧のさまざまな方法の概要

目次1. はじめに2. 直接回復2.1 mysqldumpバックアップの完全リカバリ2.2 xtra...

React-vscode で jsx 構文を使用する際の問題と解決策

問題の説明プラグインをインストールした後、ES7 React/Redux/GraphQL/React...

React useMemo と useCallback の使用シナリオ

目次メモを使うコールバックの使用メモを使う親コンポーネントが再レンダリングされると、そのすべての要素...

MySQL で主キーと ROWID を使用する際の落とし穴の概要

序文MySQL の rowid の概念については聞いたことがあるかもしれませんが、テストや実践が難し...

MySQL全文検索の使用例

目次1. 環境整備2. データの準備3. ショーを始める4. 単語分割エンジン要約する参考文献1. ...

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

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