非常に詳細な Vue-Router のステップバイステップのチュートリアル

非常に詳細な Vue-Router のステップバイステップのチュートリアル

最近、vue ファミリー全体を見直しています。改めて読んでみるとより深く思い出せる気がしたので、特別に記録に残しました (この記事の vue-router のバージョンは v3.x です)。

1. ルータビュー

<router-view> は、パスに一致するビュー コンポーネントをレンダリングするために使用される機能コンポーネントです。 <transition> および <keep-alive> と一緒に使用できます。両方を一緒に使用する場合は、必ず内部で <keep-alive> を使用してください。

<ルータービュー></ルータービュー>
<!--または-->
<ルータービュー名="フッター"></ルータービュー>

<router-view> に名前が設定されている場合、対応するルーティング構成内のコンポーネントの下の対応するコンポーネントがレンダリングされます。

2. ルータリンク

<router-link> タグは、ルーティング機能を備えたアプリケーションでのユーザー (クリック) ナビゲーションをサポートします。

財産タイプ例示する
文字列/オブジェクトターゲットルート/ロケーションオブジェクト
交換するブールナビゲーション履歴が残っていません
追加ブール現在のパスの後にパス /a => /a/b を追加します。
タグレンダリングするラベルを指定します
アクティブクラスアクティベーション中に使用されるクラス
<router-link :to="{ path: '/login'}" を tag="span" に置き換えます></router-link>

3. リダイレクト

ルートルートはログインにリダイレクトします

const ルーター = 新しい VueRouter({
  ルート: [
    { パス: '/'、リダイレクト: '/login' }
  ]
})

リダイレクトターゲットを動的に返す

const ルーター = 新しい VueRouter({
  ルート: [
    { パス: '/a'、リダイレクト先: => {
      // メソッドはターゲットルートをパラメータとして受け取り、// リダイレクトされた文字列パス/パスオブジェクトを返します }}
  ]
})

4. ルーティングエイリアス

ルートが/bにアクセスすると、URLは/bのままですが、ルートマッチは/aになります。

const ルーター = 新しい VueRouter({
  ルート: [
    { パス: '/a'、コンポーネント: A、エイリアス: '/b' }
  ]
})

5. ルーティングプロップ

$routeとの過剰な結合を避けるためにpropsを使用し、propsを使用してコンポーネント内で直接パラメータを受け取ることができるようにします。

5.1、ブールモード

ルートの後にパラメータを記述し、propsをtrueに設定します

{
 パス: '/vuex/:id',
 名前: 'Vuex'、
 コンポーネント: () => import('@/view/vuex'),
 プロパティ: true、
 メイト:
  タイトル: 'vuex'
 }
}

ジャンプに渡す必要のあるパラメータを設定する

<router-link :to="{name:'Vuex', params: {id: '99999'}}" tag="h1">ジャンプ</router-link>
<!--または-->
トゥネクスト() {
    this.$router.push({
     名前: 'Vuex'、
     パラメータ: {
      id: '99999'
     }
    })
}

ジャンプ先のページでは、propsまたはthis.$paramsを使用してパラメータを取得します。

小道具: {
 id: {
  タイプ: 文字列、
  デフォルト: ''
 }
}
<!--または-->
this.$params.id

5.2 オブジェクトモード

静的データを運ぶためにルート内のオブジェクトとしてpropsを設定する

{
 パス: '/vuex',
 名前: 'Vuex'、
 コンポーネント: () => import('@/view/vuex'),
 小道具: {
  id: '99999'
 },
 メイト:
  タイトル: 'vuex'
 }
}

ジャンプ

<router-link :to="{name:'Vuex'}" tag="h1">ジャンプ</router-link>
<!--または-->
トゥネクスト() {
 this.$router.push({
  名前: 'Vuex'
 })
}

ジャンプ先のページでは、propsまたはthis.$paramsを使用してパラメータを取得します。

小道具: {
 id: {
  タイプ: 文字列、
  デフォルト: ''
 }
}
<!--または-->
this.$params.id

注: 静的データにのみ適用されます

5.3、機能モード

まずルート内の Function に props を設定し、オブジェクトを返します。クエリでもパラメータでも、props に変換できます。

{
 パス: '/vuex',
 名前: 'Vuex'、
 コンポーネント: () => import('@/view/vuex'),
 プロパティ: ルート => ({
     <!--クエリ-->
  id: ルート.クエリ.id、
  <!--パラメータ-->
  年齢: route.params.age
 })、
 メイト:
  タイトル: 'vuex'
 }
}

ジャンプ

<router-link :to="{name:'Vuex',query: {id: '99999'}, params:{age:'20'}}" tag="h1">ジャンプ</router-link>
<!--または-->
トゥネクスト() {
 this.$router.push({
  名前: 'Vuex'、
  クエリ: {
   id: '999999'
  },
  パラメータ: {
   年齢: '20'
  }
 })
}

ジャンプ先のページで、props または this.$route.params / this.$route.query を通じてパラメータを取得します。

小道具: {
 id: {
  タイプ: 文字列、
  デフォルト: ''
 },
 年: {
  タイプ: 文字列、
  デフォルト: ''
 }
}
<!--または-->
this.$route.query
this.$route.params

6. ルーティングガード

ルート ガードは主に、リダイレクトまたはキャンセルによってナビゲーションを保護するために使用されます。

6.1、グローバル事前ガードbeforeEach

ナビゲーションがトリガーされると、グローバル before ガードが作成された順序で呼び出されます。ガードは非同期的に解析および実行され、ナビゲーションはすべてのガードが解析されるまで待機します。

パラメータ例示する
入力するターゲットルートオブジェクト
から現在のナビゲーションがこれから出発するルート
コールバックメソッド

nextの使い方は以下のとおりです

文法例示する
次()次のフックに進む
次へ(偽)ナビゲーションを中断します。URL が変更されている場合は、送信元アドレスにリセットします。
次('/')現在のジャンプを中断して別のアドレスに移動します。ルーティングオブジェクトを設定できます
次へ(エラー)ナビゲーションが終了し、エラーがonError()に渡されます。
const ルーター = 新しい VueRouter({...})

router.beforeEach((to, from, next) => {
  // ...
})

6.2、グローバル解決ガード beforeResolve

2.5.0 の新機能。beforeEach に似ていますが、解析ガードはナビゲーションが確認される前、コンポーネントと非同期ルーティング コンポーネント内のすべてのガードが解析された後に呼び出される点が異なります。

router.eforeResolve((to, from, next) => {
  // ...
})

6.3、グローバルポストフック afterEach

ポストガードは次の関数を受け入れず、ナビゲーション自体を変更しません。

router.afterEach((to, from) => {
  // ...
})

6.4、ルータの排他ガードbeforeEnter

グローバル before ガードと同じメソッド パラメータを使用して、ルート構成で独自の beforeEnter ガードを直接定義できます。

const ルーター = 新しい VueRouter({
  ルート: [
    {
      パス: '/foo',
      コンポーネント: Foo、
      beforeEnter: (to, from, next) => {
        // ...
      }
    }
  ]
})

6.5、コンポーネント内のガード

  • ルートに入る前

ナビゲーションが確定する前にガードが呼び出されるため、ガードはこれにアクセスできず、表示される新しいコンポーネントはまだ作成されていません。コールバックを next に渡すことで、コンポーネント インスタンスにアクセスできます。ナビゲーションが確定するとコールバックが実行され、コンポーネント インスタンスがコールバック メソッドのパラメーターとして使用されます。

const フッター = {
  テンプレート: `...`,
  beforeRouteEnter(to, from, next) {
    次(vm => {
        // `vm` 経由でコンポーネントインスタンスにアクセスします})
  }
}
  • beforeRouteUpdate (2.2 の新機能)

現在のルートが変更されたがコンポーネントが再利用されるときに呼び出され、これを使用してコンポーネント インスタンスにアクセスできます。

定数Foo = {
  テンプレート: `...`,
  ルート更新前(to、from、next) {
    this.name = to.params.name
    次()
  }
}
  • ルート出発前

このコンポーネントの対応するルートから移動するときに呼び出されます。通常、変更を保存する前にユーザーが突然離れるのを防ぐために使用されます。 next(false) を呼び出すことでキャンセルできます。

定数Foo = {
  テンプレート: `...`,
  beforeRouteLeave(to, from, next) {
    const answer = window.confirm('本当に終了してもよろしいですか?')
    (答え)の場合{
        次()
    } それ以外 {
        次へ(偽)
    }
  }
}

6.6、ナビゲーション分析プロセスを完了する

  1. ナビゲーションが起動します。
  2. 非アクティブ化されたコンポーネントで beforeRouteLeave ガードを呼び出します。
  3. グローバル beforeEach ガードを呼び出します。
  4. 再利用されたコンポーネントで beforeRouteUpdate ガードを呼び出します (2.2 以降)。
  5. ルーティング構成で beforeEnter を呼び出します。
  6. 非同期ルーティング コンポーネントを解決します。
  7. アクティブ化されたコンポーネントで beforeRouteEnter を呼び出します。
  8. グローバル beforeResolve ガード (2.5 以降) を呼び出します。
  9. ナビゲーションが確認されました。
  10. グローバル afterEach フックを呼び出します。
  11. DOM 更新をトリガーします。
  12. beforeRouteEnter ガード内の next に渡されたコールバック関数を呼び出すと、作成されたコンポーネント インスタンスがコールバック関数のパラメーターとして渡されます。

7. ルーティングメタ情報

ルートを定義するときに、各ルートに対応する情報を格納するようにメタ オブジェクト フィールドを構成できます。 this.$route.meta 経由でアクセスするか、ルートガード内の to.meta および from.meta 経由でアクセスします。

const ルーター = 新しい VueRouter({
  ルート: [
    {
  パス: '/index',
  名前: 'インデックス'、
  コンポーネント: () => import('@/view/index'),
  メタ: {
   タイトル: 'ホームページ'、
   rolu: ['管理者', 'ボス']
  }
 }
  ]
})

8. トランジション効果

router-view タグを transition タグで囲むだけです。アニメーション効果は自分で定義できます。 transition コンポーネントの使用方法を参照してください。また、親コンポーネントまたは app.js で watch を使用して $route の変更を監視し、さまざまなルートに応じて遷移コンポーネントの name 属性を置き換え、さまざまなアニメーション効果を実現することもできます。

<トランジション:name="トランジション名">
  <ルータービュー></ルータービュー>
</トランジション>

モニター

時計:
  '$route' (to、from) {
    定数 toD = to.path.split('/').length
    定数 fromD = from.path.split('/').length
    this.transitionName = toD < fromD ? 'slide-right' : 'slide-left'
  }
}

9. スクロール動作

Router インスタンスを作成するときに、scrollBehavior メソッドを提供し、ルート オブジェクトとの間で送受信を行うことができます。 3 番目のパラメータ savedPosition は、ブラウザの進む/戻るボタンによってトリガーされた場合にのみ使用できます。

const ルーター = 新しい VueRouter({
 モード: 'ハッシュ'、
 ルート、
 scrollBehavior(to, from, savedPosition) {
  if (保存された位置) {
   新しい Promise を返します ((resolve, reject) => {
    タイムアウトを設定する(() => {
     解決(保存された位置)
    }, 1000)
   })
  } それ以外 {
   戻り値: { x: 0, y: 0 }
  }
 }
})

10. ルーティング構成を完了する

まず Vue と vue-router をインポートし、次に router を使用してルーティング情報のセットを定義します。各ルートは、次のプロパティを持つオブジェクトです。

財産タイプ価値
パスコンポーネントパス情報
名前コンポーネントの命名
成分関数コンポーネント
メイト物体メタ情報
子供たち物体サブルーティング
リダイレクトリダイレクト
小道具ブール/オブジェクト/関数パラメータの受け渡し

具体的なコードは次のとおりです。

'vue' から Vue をインポートします
'vue-router' から VueRouter をインポートします。
Vue.use(VueRouter)

定数ルート = [
 {
  パス: '/'、
  リダイレクト: '/index'
 },
 {
  パス: '/index',
  名前: 'インデックス'、
  コンポーネント: () => import(/* webpackChunkName: "index" */ '@/view/index'),
  メイト:
   タイトル: 'ホームページ'、
   認証: 偽
  }
 },
 {
  パス: '/login',
  名前: 'ログイン',
  コンポーネント: () => import(/* webpackChunkName: "login" */ '@/view/login'),
  メタ: {
   タイトル: 「ログイン」
   認証: 偽
  },
  子供たち: [
   {
    パス: 'children',
    名前: 「子供」
    コンポーネント: () => import(/* webpackChunkName: "children" */ '@/view/children'),
    メイト:
     タイトル: 「ネストされたサブルート」
     認証: 偽
    }
   }
  ]
 }
]

const ルーター = 新しい VueRouter({
 モード: 'ハッシュ'、
 ルート
})

デフォルトルーターをエクスポートする

注意: ネストされたサブルートは、ネストされたページの <router-view> タグ内に配置する必要があります。

要約する

これで、Vue-Router チュートリアルに関するこの記事は終了です。Vue-Router のステップバイステップのチュートリアルに関する関連コンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • vue3+TypeScript+vue-routerの使い方
  • Vue-router ネストルーティングの詳細な説明
  • vue-router 4 の使用例の詳しい説明
  • Vue-Routerのルート設定の詳しい説明
  • バックエンドの権限に基づいてナビゲーション メニューを動的に生成する Vue-router のサンプル コード
  • Vue-Routerのインストールプロセスと原理の詳細
  • Vue-Routerのインストールと使用方法の詳細な説明
  • vue3 で vue-router を使用するための完全な手順
  • Vue ルーター vue-router 詳細説明ガイド
  • Vue-routerルーティングの使い方
  • Vue ルーティング vue-router の使用方法の説明

<<:  Linux echo テキスト処理コマンドの使用法と例

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

推薦する

Idea で Tomcat のソースコードデバッグを開始し、デバッグのために Tomcat に入る方法

idea 開発ツールを使用してコードをデバッグする場合、Java Web プロジェクトで、Web コ...

Linux 上で Python3.6 をコンパイルしてインストールするための詳細なチュートリアル

1. まず、公式ウェブサイト https://www.python.org/downloads/so...

HTMLページ内の検索機能を完了する

最近、たくさんの人に改変してもらったフレームワークに取り組んでいます。毎日コードを見ていると目が回り...

MySQL の列から行への変換のヒント (共有)

序文:多くのビジネス テーブルでは、歴史的またはパフォーマンス上の理由により、最初のパラダイムに違反...

Vueの子コンポーネントが親コンポーネントのメソッドを呼び出す場合の詳細な説明

1. 子コンポーネントのthis.$parent.eventを通じて親コンポーネントメソッドを直接呼...

Windows で mysql 8.0.12 をインストールするための詳細なチュートリアル

この記事では、MySQL 8.0.12のインストール方法に関する詳細なチュートリアルを参考までに紹介...

JavaScript フロー制御 (ループ)

目次1. forループ2. 二重の for ループ3. whileループ4. dowhileループ5...

Windows Server 2019 のセットアップ方法 (画像とテキスト付き)

1. Windows Server 2019 のインストールVmware に Windows Se...

Docker 構成 Alibaba Cloud イメージアクセラレーション プル実装

今日はdockerを使ってイメージをpullしたのですが、速度が悪くて見れず最後まで待ち続けました。...

Nginx の純粋な構成でリアルタイム ログ レポートを実現するためのアイデアと方法

目次序文実装のアイデア実装手順1. Nginxをコンパイルする2. 設定ファイルは以下のとおりです要...

JSON.stringify の簡易版の実装とその 6 つの主要機能の詳細な説明

目次序文JSON.stringify の 6 つの機能特集1特集2特集3特集4特集5特集6手動で文字...

MySQL ビューの原理と基本操作例

この記事では、例を使用して、MySQL ビューの原理と基本操作を説明します。ご参考までに、詳細は以下...

MySQL挿入パフォーマンスを最適化する方法の例

MySQL パフォーマンスの最適化MySQL パフォーマンスの最適化とは、リソースを合理的に配置し、...

Mysql が CPU を過剰に占有する場合の最適化方法 (必読)

Mysql が CPU を占有しすぎる場合、どこから最適化を開始すればよいでしょうか? CPU 使...