序文Vue Router は、Vue.js の公式ルーティング マネージャーです。 Vue.js のコアと深く統合されているため、シングルページ アプリケーションを簡単に構築できます。 含まれる機能は次のとおりです:
この記事は、著者が実際のプロジェクトで遭遇したいくつかの事柄をまとめたものであり、主に次の内容が含まれます。
この記事がお役に立てば幸いです。 文章 1. ルーティングパラメータの変更に対応する再利用されたコンポーネント (ルーティング パラメータのみが変更された) の場合、ライフサイクル関数フックは呼び出されません。コンポーネントを更新するにはどうすればよいですか? 時計 時計: '$route' (to、from) { // ルートの変更に応答します... } } ルート更新前 beforeRouteUpdate (to、from、next) { // ルートの変更に反応します... // next() を忘れずに呼び出してください } 2. ルートマッチング{ // すべてのパスに一致します パス: '*' } { // `/user-` で始まるパスに一致します。パス: '/user-*' } 注: ワイルドカード ルートを使用する場合は、ルートの順序が正しいことを確認してください。つまり、ワイルドカードを含むルートは最後に配置する必要があります。ルート { path: '*' } は通常、クライアント側の 404 エラーに使用されます。 履歴モードを使用する場合は、サーバーが正しく設定されていることを確認してください。 ワイルドカードを使用すると、pathMatch というパラメータが $route.params に自動的に追加されます。 ワイルドカードに一致する URL の部分が含まれます。 //ルートが指定されている場合 { path: '/user-*' } this.$router.push('/user-admin') this.$route.params.pathMatch // 'admin' //ルートが指定されている場合 { path: '*' } this.$router.push('/存在しない') this.$route.params.pathMatch // '/存在しない' 3. 高度なマッチングモード// 名前付きパラメータは「単一の文字」で構成されている必要があります [A-Za-z09] // ?オプション パラメータ { パス: '/optional-params/:foo?' } // ルーティングは foo パラメータを設定することも設定しないこともでき、オプションです <router-link to="/optional-params">/optional-params</router-link> <router-link to="/optional-params/foo">/optional-params/foo</router-link> // 0 個以上のパラメータ { パス: '/optional-params/*' } <router-link to="/number">パラメータなし</router-link> <router-link to="/number/foo000">パラメータ</router-link> <router-link to="/number/foo111/fff222">複数のパラメータ</router-link> // 1 つ以上のパラメータ { path: '/optional-params/:foo+' } <router-link to="/number/foo">パラメータ</router-link> <router-link to="/number/foo/foo111/fff222">複数のパラメータ</router-link> // カスタムマッチングパラメータ // すべてのパラメータにカスタム正規表現を指定することができます。これはデフォルト ([^\/]+) を上書きします。 { パス: '/optional-params/:id(\\d+)' } { パス: '/optional-params/(foo/)?bar' } 4. マッチングの優先順位場合によっては、パスが複数のルートと一致することがあります。 この時点で、一致する優先順位はルートが定義されている順序に基づきます。つまり、最初に定義されたルートの優先順位が最も高くなります。 5. pushとreplaceの2番目と3番目のパラメータバージョン 2.2.0 以降では、router.push または router.replace の 2 番目と 3 番目の引数として、onComplete コールバックと onAbort コールバックをオプションで提供できます。 これらのコールバックは、ナビゲーションが正常に完了したとき (すべての非同期フックが解決された後)、または終了したとき (同じルートに移動したとき、または現在のナビゲーションが完了する前に別のルートに移動したとき) に呼び出されます。 3.1.0 以降では、2 番目と 3 番目のパラメータを省略でき、Promise がサポートされている場合は router.push または router.replace は Promise を返します。 次に、2 番目と 3 番目のパラメータがいつ呼び出されるかを確認するためのいくつかの例を見てみましょう。 1. コンポーネント1がコンポーネント2にジャンプする // コンポーネント 1 this.$router.push({ name: 'number' }, () => { console.log('コンポーネント1: onCompleteコールバック'); }, () => { console.log('コンポーネント1: onAbortコールバック'); }); // コンポーネント 2 beforeRouteEnter(to, from, next) { console.log('コンポーネント2: beforeRouteEnter'); 次(); }, 作成前() { console.log('コンポーネント2: beforeCreate'); }, 作成された() { console.log('コンポーネント2: 作成されました'); } コンポーネント間を移動すると、onComplete コールバックがトリガーされます。 2. コンポーネント2はコンポーネント2にジャンプします(パラメータなし) this.$router.push({ name: 'number'}, () => { console.log('コンポーネント2: onCompleteコールバック'); }, () => { console.log('コンポーネント2、自己ジャンプ: onAbortコールバック'); }); コンポーネントの自己ジャンプは、パラメータがない場合に onAbort コールバックをトリガーします。しかし、自己ジャンプがパラメータを取る場合、状況は少し異なる可能性があります。 3. コンポーネント2がコンポーネント2にジャンプする(パラメータ付き) this.$router.push({ name: 'number', params: { foo: this.number}}, () => { console.log('コンポーネント2: onCompleteコールバック'); }, () => { console.log('コンポーネント2、自己ジャンプ: onAbortコールバック'); }); コンポーネント自体はパラメータでジャンプし、onComplete コールバックも onAbort コールバックもトリガーされません。 6. ルーティングビュー複数のビューをネストするのではなく、同時に(同じレベルで)表示したい場合があります。たとえば、サイドバー(サイドナビゲーション)とメイン(メインコンテンツ)の 2 つのビューを含むレイアウトを作成する場合は、名前付きビューが便利です。 単一のアウトレットを使用する代わりに、インターフェイス内に個別に名前が付けられた複数のビューを持つことができます。 ルータ ビューに名前が付けられていない場合は、デフォルトになります。 <router-view class="view one"></router-view> <router-view class="view two" name="a"></router-view> <router-view class="view three" name="b"></router-view> ビューはコンポーネントを使用してレンダリングされるため、同じルートの場合、複数のビューには複数のコンポーネントが必要になります。 コンポーネント構成を正しく使用していることを確認してください (s を使用)。 const ルーター = 新しい VueRouter({ ルート: [ { パス: '/'、 コンポーネント: デフォルト: Foo、 a: バー、 b: バズ } } ] }); 7. リダイレクト{ パス: '/a'、リダイレクト: '/b' } { パス: '/a'、リダイレクト: { 名前: 'foo' }} { パス: '/a'、リダイレクト先: => { // メソッドはターゲットルートをパラメータとして受け取り、// リダイレクトされた文字列パス/パスオブジェクトを返します }} 注: ナビゲーション ガードはリダイレクト ルートには適用されず、ターゲットにのみ適用されます。 上記の例では、/a ルートに beforeEach または beforeLeave ガードを追加しても効果はありません。 8. $route と props の分離コンポーネントで $route を使用すると、対応するルートとの結合度が高くなり、コンポーネントは特定の URL でのみ使用可能になり、柔軟性が制限されます。 // ルーター ファイル // 名前付きビューを含むルートの場合は、名前付きビューごとに `props` オプションを個別に追加する必要があります。 { パス: '/number/:name', プロパティ: true、 // オブジェクト モードのプロパティ: {newsletterPopup: false } // 関数モードのプロパティ: (route) => ({ query: route.parmas.name }) 名前: '番号', コンポーネント: () => import( /* webpackChunkName: "number" */ './views/Number.vue') } //コンポーネントはエクスポートのデフォルトを取得します{ プロパティ: ['名前'] } 9. ナビゲーションガード1. 3つのグローバルガード router.before ルートに入る前の各グローバル フロント ガード。 router.beforeResolve グローバル解決ガード 2.5.0 が追加されました。 beforeRouteEnter が呼び出された後に呼び出されます。 router.after各グローバル post-hook がルートに入ります。 //エントリファイルimport router from './router' // グローバルフロントガード router.beforeEach((to, from, next) => { console.log('beforeEach グローバル フロント ガード'); 次(); }); // グローバル解決ガード router.beforeResolve((to, from, next) => { console.log('beforeResolve グローバル解決ガード'); 次(); }); // グローバルポストガード router.afterEach((to, from) => { console.log('afterEach グローバル ポスト ガード'); }); 2. ルーター専用ガード ルートに入る前にグローバルフロントガードに入ります。 { パス: '/number/:name', プロパティ: true、 名前: '番号', // ルーティング排他ガード beforeEnter: (to, from, next) => { console.log('beforeEnterルート排他ガード'); 次(); }, コンポーネント: () => import( /* webpackChunkName: "number" */ './views/Number.vue') } 3. コンポーネント内のガード ルートに入る前 beforeRouteUpdate (2.2 の新機能) ルート出発前 beforeRouteEnter(to, from, next) { // このコンポーネントをレンダリングする対応するルートが確認される前に呼び出されます // いいえ!できる!コンポーネントインスタンス `this` を取得します。 //ガードが実行される前にコンポーネント インスタンスが作成されていないため、console.log('beforeRouteEnter コンポーネントがガードに入る'); 次(); }, ルート更新前(to、from、next) { // 現在のルートが変更されたがコンポーネントが再利用されたときに呼び出されます // たとえば、動的パラメータを持つパス /foo/:id の場合、/foo/1 と /foo/2 の間を移動すると、 // 同じ Foo コンポーネントがレンダリングされるため、コンポーネント インスタンスが再利用されます。この場合、このフックが呼び出されます。 // コンポーネントインスタンス `this` にアクセスできます console.log('beforeRouteUpdate コンポーネント更新ガード'); 次(); }, beforeRouteLeave(to, from, next) { // このコンポーネントの対応するルートから移動するときに呼び出されます // コンポーネントインスタンス `this` にアクセスできます console.log('beforeRouteLeave コンポーネントがガードから出る'); 次(); } コンポーネント1はコンポーネント2にジャンプし、次にコンポーネント2はコンポーネント2自体にジャンプします。 コンポーネント1はコンポーネント2にジャンプし、次にコンポーネント2はコンポーネント1にジャンプします。 10. ガードネクストメソッドnext: このメソッドは、resolve フックを呼び出します。
やっと最後に、バグを避けるために、プロジェクトで使用する前に、ドキュメントを注意深く読んで理解していただければ幸いです。ありがとうございます。 これで、Vue Router の 10 の高度なヒントに関するこの記事は終了です。Vue Router のより高度なヒントについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: mysql 起動時の ERROR 2003 (HY000) の問題を解決する方法
>>: LinuxベースのLVMシームレスディスク水平拡張の詳細な説明
Mysql マスタースレーブ同期の Last_IO_Errno:1236 エラーの原因は何ですか? ...
MYSQL は、MYSQL サービスやその他のコンポーネントをインストールするためのインストーラ方式...
現在の日付 + 時刻 (日付 + 時刻) を取得する関数: now() mysql> now(...
HTML で色を表す方法は 3 つありますが、最もよく使われるのは 6 桁の 16 進コード表現です...
目次必要:発生した問題:解決する:必要:要素テーブル内の複数の列を並べ替えるには、日付の並べ替えをク...
プロジェクトのテスト環境データベースのデータが失われてしまったので、記録しておきたいと思います。当時...
継承する1. 継承とは何か継承: まず、継承とは関係、つまりクラス間の関係です。JS にはクラスはあ...
1. Linuxシステムにクロスシステムファイル転送ツールをインストールするルートユーザーのルートデ...
パート3: ❤バックエンドデータ受信を見落とす3つの方法❤ (おすすめ集)パート 2: Web フォ...
目次解決、要約: vue プロジェクト。 .vue ファイルのテンプレート内に記述されたコードは、w...
<br />フレーム構造により、ブラウザの 1 ページに複数の Web ページを同時に表...
目次序文1. ssコマンド2. Zabbix監視マシンの全体的なソケットステータス2.1. スクリプ...
CentOS7 のデフォルトのデータベースは mariadb ですが、mysql を使っている人も多...
監視ホストの追加ホスト 192.168.179.104 が zabbix 監視項目に追加されます (...
MySQLへの接続ここでは、リモート接続に navicat を使用します。MySQL に接続する前に...