Vueルーティングルーターの詳細な説明

Vueルーティングルーターの詳細な説明

ルーティングプラグインをモジュール方式で使用する

(1)インストール

npm で vue-router をインストールします

(2)ファイルディレクトリを構築する

srcディレクトリにルーターフォルダを作成し、index.jsを作成します。

ここに画像の説明を挿入

(3) ここでは、コード管理を容易にするために、モジュール方式でルートを作成します。ここでは、ルートプラグインを登録し、ルートオブジェクトを作成するだけです。作成されたルーティング オブジェクトは、export default キーワードを通じて公開されます。

//index.js
'vue-router' から VueRouter をインポートします。
'vue' から Vue をインポートします
「../views/Home」からHomeをインポートします。
Vue.use(VueRouter) //ルーティングプラグインを登録 export default new VueRouter({
    ルート:[{
        パス:'/'、
        コンポーネント:ホーム
    }]
})

(4)作成したルーティングオブジェクトをエントリファイルmain.jsにインポートし、Vueインスタンスにマウントします。

//メイン.js
'vue' から Vue をインポートします
'./App.vue' からアプリをインポートします。
'@/store' からストアをインポートします
import router from '@/router' //ここで、作成したルーティング オブジェクトを導入します。モジュラープログラミングの考え方 Vue.config.productionTip = false
Vue.prototype.bus = 新しい Vue()
新しいVue({
  店、
  ルーター、
  レンダリング: h => h(App),
}).$mount('#app')

ルートの使用

宣言型ナビゲーション

ラベルを飛び越えて

宣言型ナビゲーション: <router-link :to="...">または<router-link to="...">

ルーティングルールの定義

 {
        パス:'/'、
        コンポーネント:ホーム
        名前:ホーム
    }

(1)ルータリンクナビゲーションタグのto属性は文字列を使用する

 <router-link to="/">ホームへ移動</router-link>

(2)ルーターリンクナビゲーションタグを使用してオブジェクトを作成する方法

パスを使用したマッチング

 <router-link :to="{path:'/'}">ホームへ移動</router-link>

ルータリンクナビゲーションタグの属性はオブジェクトを使用し、ルート名と一致します

 <router-link :to="{name:'home'}">ホームへ移動</router-link>

プログラムによるナビゲーション

JSジャンプとして理解できる

プログラムによるナビゲーション: router.push(...)

次の例には、動的ルート マッチングとクエリ パラメータに関する知識が含まれています。よくわからない場合は、まずこれら 2 つの内容を読んでから、ここに戻って内容を読んでください。

// 文字列 router.push('home')
// オブジェクト router.push({ path: 'home' })
// 名前付きルート router.push({ name: 'user', params: { userId: '123' }})
// クエリパラメータを使用すると、/register?plan=private になります
router.push({ パス: 'register', クエリ: { プラン: 'private' }})

: パスが指定されている場合、パラメータは無視されますが、上記の例のクエリの場合はそうではありません。代わりに、ルート名とパラメータを指定するか、パラメータを含む完全なパスを手動で記述する必要があります。

定数ユーザーID = '123'
router.push({ name: 'user', params: { userId }}) // -> /user/123
router.push({ パス: `/user/${userId}` }) // -> /user/123
// ここでのパラメータは有効ではありません router.push({ path: '/user', params: { userId }}) // -> /user

動的ルートマッチング

ルーティングルールの定義

 {
        パス:'/user/:id',
        コンポーネント:ユーザー
        名前:ユーザー
    }
 <router-link to="/user/01">ホームへ移動</router-link>
 <router-link :to="{path:'/user/01'}">ホームへ移動</router-link>
 <router-link :to="{name:'/user',params={id:'01'}}">ホームへ移動</router-link>

上記のように定義することで、$route.params.idを通じて動的ルートパラメータを取得できます。id値は「01」です。

知らせ:

マッチングにオブジェクトメソッドを使用する場合、パスとパラメータは使用できません。名前とパラメータのみ

次のメソッドは、ルーティング ルール {path:'/user/:id'} に一致できません。次の式は '/user' としてのみ理解されます。

ルートが * ワイルドカードに一致した場合でも、path 属性が存在する場合は params 属性が解析されないため、params は渡されません。

{
  // すべてのパスに一致します パス: '*'
}
{
  // `/user-` で始まるパスに一致します。パス: '/user-*'
}

ワイルドカードマッチングパス

通常、* を使用して他の予期しないパスをキャプチャし、それらをフォールバックとして処理し、通常は 404 エラー ページに移動します。

<router-link to="/user?name=zhangsan">...</router-link>
<router-link :to="{path:'/user?zhangsan'}">...</router-link>
<router-link :to="{path:'/user',query:{name:'zhangsan'}}">...</router-link>
<router-link :to="{name:'user',query:{name:'zhangsan'}}">...</router-link>

ワイルドカードを使用すると、pathMatch というパラメータが $route.params に自動的に追加されます。ワイルドカードに一致するURLの部分が含まれます

クエリパラメータ

<router-link to="/user?name=zhangsan">...</router-link>
<router-link :to="{path:'/user?zhangsan'}">...</router-link>
<router-link :to="{path:'/user',query:{name:'zhangsan'}}">...</router-link>
<router-link :to="{name:'user',query:{name:'zhangsan'}}">...</router-link>

クエリ パラメータは、動的なルート パラメータ マッチングとは異なります。パスが使用されている場合でも、クエリを使用してパラメータを渡すことは可能です。

上記のクエリによって渡されたパラメータはthis.$route.query.nameを通じて取得できます。

ルーティングパラメータの変更への対応

ルートが/user/01から/user/02に移動されると、元のコンポーネント インスタンスが再利用されます。両方のルートは同じコンポーネントをレンダリングするため、コンポーネントのライフサイクル フックは再度呼び出されません。したがって、監視パラメータの変化には他の方法で対応する必要があります。

(1)監視による監視

定数ユーザー = {
  テンプレート: '...'、
  時計:
    $route(宛先、送信元) {
      // ルートの変更に応答します...
    }
  }
}

(2)航行監視員による監視

定数ユーザー = {
  テンプレート: '...'、
  ルート更新前(to、from、next) {
    // ルートの変更に反応します...
    // next() を忘れずに呼び出してください
  }
}

名前付きルート、ルートエイリアス、リダイレクト

特に、これら 3 つの概念をまとめて説明することで、それらの違いをより明確に区別できるようにしました。これらの内容はルーティング ルールで構成されます

{
        パス: '/pageOne',
        コンポーネント:PageOne、
        エイリアス: "/firstPage",
        名前:"ページ1",
        リダイレクト:{name:'pageTwo'}
    },
    {
        パス: '/pageTwo',
        コンポーネント:PageTwo、
        名前:'ページ2'
    }

(1)ルートの命名:これは、このルートに名前を付けることと理解できる。

name属性でルートに名前を付けたとしても

ルート: [
    {
      パス: '/user/:userId',
      名前: 'ユーザー',
      コンポーネント: ユーザー
    }
  ]

(2)ルートエイリアス:このルートの2番目の名前として理解することができます。

たとえば、/a のエイリアスは /b です。ユーザーが /b にアクセスすると、URL は /b のままですが、ルートに一致するコンテンツは /a になります。つまり、ナレッジ URL コンテンツは、/b のコンテンツが実際には /a であることを示します。

注意: ここでのエイリアスは、名前付きルートのように名前を直接記述するのではなく、パスとして表現する必要があります。

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

(3)リダイレクト:/aにアクセスすると/bに直接ジャンプするという意味になります。

リダイレクト ステートメントには 3 つの形式があります。

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

ネストされたルート

ネストされたルーティングは、このように理解できます。一致したルートによってレンダリングされるコンポーネントには、ルーティング コンポーネントが含まれます。ルートが一致すると、'/user' はコンポーネント User をレンダリングしますが、User コンポーネントの <router-view ></router-view> で一致を続行したい場合があります。次に、/user/childRouteName でさらに一致させる必要があります。 「childRouteName」は、ルーティング ルールの子の対応するパスの値です。

 {
      パス: '/user',
      コンポーネント: ユーザー、
      子供たち: [
        {
          // /user//profile が正常に一致すると、
          // UserProfile はユーザーの <router-view> パスにレンダリングされます: 'profile',
          コンポーネント: UserProfile
        },
        {
          // /user//posts が正常に一致すると、 // UserPosts はユーザーの <router-view> パス: 'posts' にレンダリングされます。
          コンポーネント: UserPosts
        }
      ]
    }

アプリ.Vue

<div id="アプリ">
  <ルータービュー></ルータービュー>
</div>

ユーザーコンポーネント

定数ユーザー = {
  テンプレート: `
    <div class="ユーザー">
      <span>ユーザー コンポーネント</span>
      <ルータービュー></ルータービュー>
    </div>
  `
}

知らせ:

ネストされたルート、つまり子ルートが定義されている場合、正しく一致するにはルートが完全である必要があります。つまり、/user/profile が正常に一致した場合、/user は正常に一致しません。

名前付きビュー

コンポーネント上で複数のビューを同時にレンダリングする場合は、複数のビューをネストするのではなく、同じレベルで表示することに注意してください。現時点では、ビューに名前を付けることでこの問題を解決できます。
ルーティングルールの定義

{
        パス:"/namingRoute",
        コンポーネント:{// コンポーネントは「s」で終わることに注意してください。単独で使用された場合、そうではありません。
            デフォルト:ホーム、
            1:ページワン、
            2:ページ2
        }
    }

コンポーネント定義

 	<router-view></router-view>//default に対応するコンポーネントをレンダリングします<router-view name="one"></router-view>//one に対応するコンポーネントをレンダリングします<router-view name="two"></router-view>//two に対応するコンポーネントをレンダリングします

URL が :/namingRoute で、ルートが一致すると、対応する router-view コンポーネントに従ってレンダリングされます。

ナビゲーションガード

(1)グローバルガード

これは、グローバル ルーター インスタンス オブジェクト router によって定義されたガードとして理解できます。

  • route.beforeEach (グローバル ビフォア ガード)

方向:

beforeEach((to,from,next)=>{
	//...
})
  • router.beforeResolve (グローバル解決ガード)

コンポーネントと非同期ルートコンポーネントのすべてのガードが解決された後、解決ガードが呼び出されます。

方向:

router.beforeResolve((to, from, next) => {
  // ...
})
  • router.afterEach (グローバル after フック)

フックは next 関数を受け入れず、ナビゲーション自体を変更しません。

方向:

router.afterEach((to, from) => {
  // ...
})
使用される場所: 通常はルーターフォルダ内のindex.js
const ルーター = 新しい VueRouter({...})
//グローバルフロントガード router.beforeEach((to, from, next) => {
  // ...
})
//グローバル解決ガード router.beforeResolve((to, from, next) => {
  // ...
})
//グローバルポストフック router.afterEach((to, from) => {
  // ...
})

(2)専用ルーターガード

これはルーティングルールで定義されたガードとして理解できる。

  • 前に入る

(3)部品内部の保護

これはコンポーネント内で定義されたガードとして理解できる。

  • ルートに入る前

コンポーネント インスタンスはまだ作成されていません。ルートが確定する前に呼び出されます。

定数ユーザー = {
  テンプレート: `...`,
  beforeRouteEnter(to, from, next) {
    // このコンポーネントをレンダリングする対応するルートが確認される前に呼び出されます // いいえ!できる!コンポーネントインスタンス `this` を取得します。
    // ガードが実行される前にコンポーネントインスタンスが作成されていないため}
}

知らせ:

コンポーネント インスタンスがまだ作成されていないため、ガードはこれを直接使用して vue インスタンス オブジェクトにアクセスすることはできません。ただし、次のメソッドにコールバックを渡して、コンポーネント インスタンスを見つけることができます。

next() にコールバックを渡すことは、beforeRouteEnter 内で使用される場合にのみ有効です。 ! !

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

ルートが変更され、コンポーネントが使用されるときに呼び出されます

定数ユーザー = {
  テンプレート: `...`,
  ルート更新前(to、from、next) {
    // 現在のルートが変更されたがコンポーネントが再利用されたときに呼び出されます // たとえば、動的パラメータを持つパス /foo/:id の場合、/foo/1 と /foo/2 の間を移動すると、
    // 同じ Foo コンポーネントがレンダリングされるため、コンポーネント インスタンスが再利用されます。この場合、このフックが呼び出されます。
    // コンポーネントインスタンス `this` にアクセスできます
  }
}
  • ルート出発前

ナビゲーションがこのコンポーネントに対応するルートを離れたときに呼び出されます

定数ユーザー = {
  テンプレート: `...`,
  beforeRouteLeave(to, from, next) {
    // このコンポーネントの対応するルートから移動するときに呼び出されます // コンポーネントインスタンス `this` にアクセスできます
  }
}

ナビゲーション分析プロセス

最初のアクセスルートの通常の実行順序

  • 各グローバルルーティングフロントガード
  • 排他ルートガードに入る前
  • beforeRouteEnterコンポーネントルーティングガード
  • beforeResolve グローバルルーティング解決ガード
  • afterEach グローバルルーティングポストフック
  • Dom レンダリング
  • beforeRouteEnter コンポーネント ルーティング ガードで next に渡されるコールバック関数を呼び出します。そして、作成されたコンポーネント インスタンスをコールバック関数のパラメーターとして渡します。

要約する

この記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。

以下もご興味があるかもしれません:
  • Vue-router ネストルーティングの詳細な説明
  • vue.js ルーターのネストされたルート
  • Vue のルータールーティングの 2 つのモード (ハッシュと履歴) の詳細な説明
  • vue ルーティング ビュー router-view のネストされたジャンプの実装
  • VueRouterルーティングの詳細な説明
  • Vueルータールーティングの詳細な説明

<<:  HTML テーブルタグチュートリアル (26): セルタグ

>>:  TLS暗号化通信を使用してDockerにリモート接続する詳細な例

推薦する

Webデザイナーの成長体験

<br />まず最初に、私はこのグループの中では完全な新人だということを述べなければなり...

CUDA10.0 のインストールと Ubuntu での問題

Tensorflow バージョンと Cuda および CUDNN の対応: https://tens...

Reactを使用して画像認識アプリを実装する方法

まずは効果の写真をお見せしましょう。 個人的には効果は問題ないと思います。アプリが写真を学習する時間...

Apache での ModSecurity のインストール、有効化、および構成

ModSecurity は、Web サーバーに入るすべてのパケットをチェックする強力なパケット フィ...

HTML スタイル タグと関連する CSS リファレンスの詳細な説明

HTML スタイル タグスタイルタグ - ドキュメント内でスタイルを宣言するときにこのタグを使用しま...

Vue ミックスインの使い方の詳しい説明

目次Vue ミックスインの使用ミックスインでのデータアクセスミックスイン/index.jsホーム.v...

Vueプロジェクトでvuexを使用する方法

目次Vuex とは何ですか? Vuex 使用サイクル図私のストアディレクトリvuexの例の実装要約す...

MySQLでSELECT文が実行される仕組み

目次1. マクロの観点からMySQLを分析する2. SQL ステートメントを実行するには、どの程度の...

Vue でコンポーネントを一括インポート、登録、使用する方法

序文コンポーネントは、非常に頻繁に使用されるものです。多くの人は、コンポーネントを 1 つのファイル...

クラウドサーバーはBaotaを使用してPython環境を構築し、Djangoプログラムを実行します。

目次PagodaをインストールするPythonランタイム環境を構成するPythonをインストールする...

Vue開発の一般的な手法の詳細な説明

目次$nextTick() $forceUpdate() $セット() .sync——2.3.0 以...

将来的に人気のあるウェブサイトのナビゲーションの方向

<br />今は情報爆発の時代であるだけでなく、サービス爆発の時代でもあります。それはす...

CSSでプロセスナビゲーション効果を実現する(3つの方法)

CSS によりプロセスナビゲーション効果を実現します。具体的な内容は以下のとおりです。 ::tip...

Vuexはセッションストレージデータを結合して、ページを更新するときにデータが失われる問題を解決します

目次序文1. 理由: 2. 解決策のアイデア: 1. ローカル保存方法: 2. 実装手順: 3. 最...

vue3 を使用してマテリアル ライブラリを構築する方法

目次なぜマテリアルライブラリが必要なのでしょうか?材質は何ですか?素材の種類fuep、vue3 ベー...