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

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

vueルーター

1. ルーティングの概念を理解する

1.1 ルーティングとは何ですか?

相互接続されたネットワークを介して送信元アドレスから宛先アドレスに情報を転送するアクティビティ。

1.2. バックエンドルーティングステージ

ウェブサイト開発の初期には、HTML ページ全体がサーバーによってレンダリングされていました。
サーバーは対応する HTML ページを直接生成してレンダリングし、クライアントに返して表示します。
しかし、Web サイトはどのようにしてこれほど多くのページ サーバーを処理するのでしょうか?
ページには、対応する独自の Web アドレス、つまり URL があります。
URL はサーバーに送信され、サーバーは URL を正規表現と照合し、最終的に処理のためにコントローラーに渡します。
コントローラーはさまざまな処理を実行し、最終的に HTML やデータを生成してフロントエンドに返します。
これでIO操作が完了します。
上記の操作はバックエンドルーティングです。
ページ内で異なるパスのコンテンツをリクエストする必要がある場合、処理のためにサーバーに渡します。サーバーはページ全体をレンダリングし、ページをクライアントに返します。この場合、レンダリングされたページは js と css を個別にロードする必要がなく、表示のためにブラウザに直接渡すことができるため、SEO 最適化にも役立ちます。
バックエンドルーティングの欠点:
1 つの状況は、ページ モジュール全体がバックエンド担当者によって作成および保守される場合です。
もう 1 つの状況は、フロントエンド開発者がページを開発する場合、PHP や Java などの言語を使用してページ コードを記述する必要があることです。
そして通常、HTML コード、データ、および対応するロジックが混在しており、作成と保守が非常に困難です。

1.3. フロントエンドルーティングステージ

フロントエンドとバックエンドの分離段階:
Ajax の登場により、フロントエンドとバックエンドを分離した開発モデルが生まれました。
バックエンドはデータを返す API のみを提供し、フロントエンドは Ajax を介してデータを取得し、JavaScript を介してページにデータをレンダリングできます。
これの最大の利点は、フロントエンドとバックエンドの責任が明確であることです。バックエンドはデータに重点​​を置き、フロントエンドはインタラクションと視覚化に重点を置きます。
また、モバイル端末 (iOS/Android) が登場しても、バックエンドは処理を行う必要がなく、以前の API セットを引き続き使用できます。
多くのウェブサイトは今でもこのように開発されています。
シングルページのリッチアプリケーションステージ:
実際、SPA の主な特徴は、フロントエンドとバックエンドの分離に基づいてフロントエンド ルーティングのレイヤーを追加することです。
つまり、フロントエンドはルーティング ルールのセットを維持します。
フロントエンドルーティングの核となるものは何ですか?
URL は変更されますが、ページ全体は更新されません。
どうやってそれを達成するのでしょうか?

1.4. フロントエンドレンダリングとバックエンドレンダリング?

フロントエンド レンダリング: サーバーは対応する HTML ページを直接生成してレンダリングし、クライアントに返して表示します。例: jspページ

ここに画像の説明を挿入

バックエンド レンダリング: バックエンドは JSON データを返し、フロントエンドは事前に記述された HTML テンプレートを使用して JSON データをループし、文字列を連結してページに挿入します。

ここに画像の説明を挿入

2. フロントエンドルーティングルール

2.1. URLハッシュ

場所の説明

ここに画像の説明を挿入

location.href効果によりページ全体が更新されます

画像の説明を追加してください

location.hash の完全更新ではなく部分更新

画像の説明を追加してください

2.2. HTML5 履歴モード

  • pushState バックスタック構造

機能: 先入れ後出し pushState: スタックにプッシュ back: スタックからポップアウト

効果は以下のとおりです

  • 状態を戻す

後戻りはできない

  • 行く

history.go(-1) 1ステップ戻る
history.go(1) <=> history.forward() 1ステップ進む

3. ルートビューの基本

3.1 vue-routerを理解する

  • vue-routerはコンポーネントとルーティングに基づいています

ルーティングは、アクセス パスを設定し、パスをコンポーネントにマップするために使用されます。
vue-router のシングルページアプリケーションでは、ページパスの変更はコンポーネントの切り替えになります。

3.2. vue-routerをインストールして使用する

  • webpackを使用してエンジニアリング開発を作成する
  • インストールnpm install vue-router --save
  • モジュール使用

ルーティングオブジェクトをインポートし、Vue.use(VueRouter) を呼び出します。

ルーティングインスタンスを作成し、ルーティングマップ構成を渡します

作成したルーティングインスタンスをvueインスタンスにマウントする

  • vue-routerステップの使用

ルーティングコンポーネントの作成

ルートマッピング、コンポーネント、パスマッピングの関係を構成する

.vueについて

<テンプレート>
  <div>
    <h2>私は</h2>
    <p>私はコンテンツが大事です、へへ</p>
  </div>
</テンプレート>

<スクリプト>
  エクスポートデフォルト{
    名前: 「概要」
  }
</スクリプト>

<スタイルスコープ>

</スタイル>

ホーム.vue

<テンプレート>
  <div>
    <h2>私はホームページです</h2>
    <p>私はホームページのコンテンツです、ハハハ</p>
  </div>
</テンプレート>

<スクリプト>
  エクスポートデフォルト{
    名前: 「ホーム」
  }
</スクリプト>

<スタイルスコープ>

</スタイル>

ルーター -> index.js

// VueRouterオブジェクトを作成する constroutes = [
    {
        パス: ''、
        <!--ルーティングのデフォルト値-->
        // デフォルトページはホームページリダイレクトに直接ロードされます: '/home'
    },
    {
        パス: '/home',
        コンポーネント: ホーム
    },
    {
        パス: '/about',
        コンポーネント: について
    },
]

const ルーター = 新しい VueRouter({
    //ルートとコンポーネントルート間のアプリケーション関係を設定します。
    モード:"履歴",
    リンクアクティブクラス:"アクティブ"
})

  • router-linkとrouter-viewを使用して表示する
<テンプレート>
  <div id="アプリ">
    <router-link to="/home">ホーム</router-link>
    <router-link to="about">について</router-link>
    <ルータービュー/>
  </div>
</テンプレート>

一般的なプロセス
1. 指示に従ってVueプロジェクトを作成する

vue 作成 vuerouterstudy

2. デフォルトで生成されたHelloWorldコンポーネント関連情報を削除する
3. ルーティングインスタンスを作成し、ルーティングマップ構成を渡す

ホーム.vue

<テンプレート>
    <div>
        私はホームページのコンテンツです</div>
</テンプレート>

インデックス

'vue-router' から VueRouter をインポートします。
'vue' から Vue をインポートします
'../components/Home' から Home をインポートします。

// 1. Vue.use(プラグイン名) 経由で Vue.use(VueRouter) プラグインをインストールします。

// 2. VueRouterオブジェクトを作成する constroutes = [
    {
        パス: '/home',
        コンポーネント: ホーム
    }
]

// 3. ルーティングとコンポーネント間のマッピング関係を構成する const router = new VueRouter({
    ルート
})

// 4. ルータオブジェクトをVueインスタンスに渡す export default router

ルートの使用
アプリ.vue

<テンプレート>
  <div id="アプリ">
    <!-- ハイパーリンクをレンダリングします -->
    <router-link to="/home" tag="button">ホーム</router-link>
    <router-link to="/about" tag="button">について</router-link>

    <!-- 動的レンダリング コンポーネント -->
    <ルータービュー></ルータービュー>
  </div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
  名前:「アプリ」、
  コンポーネント: {},
};
</スクリプト>

<スタイル>
</スタイル>

コンポーネントの簡単な説明

<router-link>: このタグはvue-routerの組み込みコンポーネントであり、最終的にはリンクをレンダリングします。<router-view>: このタグは、現在のパスに応じて、上部のタイトルナビゲーションや下部の著作権情報など、さまざまなコンポーネントWebページの他のコンテンツを動的にレンダリングします。同じ登録ルートが切り替えられると、スイッチは<router-view>によってマウントされたコンポーネントであり、他のコンテンツは変更されません。

最終レンダリング

ここに画像の説明を挿入

3.3. ルーティングのデフォルトパス

デフォルトでは、Web サイトのホームページにアクセスすると、<router-view> によってホームページのコンテンツがレンダリングされます。
ただし、私たちの実装では、ホームページ コンポーネントはデフォルトでは表示されず、ユーザーがクリックする必要があります。
パスをデフォルトでホームページにジャンプさせ、<router-view> でホームページ コンポーネントをレンダリングするにはどうすればよいですか?
とても簡単です。あと 1 つのマッピングを構成するだけです。

ここに画像の説明を挿入

構成解析

ルートに別のマッピングを構成しました。
パス構成はルートパスです: /
リダイレクトはリダイレクトです。つまり、ルート パスを /home のパスにリダイレクトして、必要な結果を得ることができます。

3.4. HTML5 履歴モード

デフォルトページはURLのハッシュモードです

ここに画像の説明を挿入

HTML5で履歴に変更したい場合は、次のように設定します。

ここに画像の説明を挿入


画像の説明を追加してください

3.5. ルータリンク補足

  • タグ属性: タグは後でレンダリングするコンポーネントを指定できます。たとえば、上記のコードは要素としてではなく、

ここに画像の説明を挿入

  • 置換属性: 置換は履歴を残さないので、置換が指定されている場合は戻るキーで前のページに戻ることはできません。

ここに画像の説明を挿入

  • Active-class 属性: 対応するルートが正常に一致すると、現在の要素に対して router-link-active クラスが自動的に設定されます。active-class を設定すると、デフォルト名を変更できます。

このクラスは、ナビゲーション メニューまたは下部のタブバーを強調表示するときに使用されます。
ただし、クラス属性は通常は変更されず、デフォルトの router-link-active が直接使用されます。

ここに画像の説明を挿入

このメソッドはルーティング設定のindex.jsでも使用できます。

3.6. ルーティングコードジャンプ

ソースコードの実装

<テンプレート>
  <div id="アプリ">
    <!-- ハイパーリンクをレンダリングします -->
    <!-- <router-link to="/home" tag="h1" replace>ホーム</router-link> -->
    <!-- <router-link to="/about" tag="h1" replace active-class>概要</router-link> -->
    <button @click="handleHome">ホーム</button>
    <button @click="handleAbout">について</button>
    <!-- 動的レンダリング コンポーネント -->
    <ルータービュー></ルータービュー>
  </div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
  名前:「アプリ」、
  コンポーネント: {},
  方法:{
    ハンドルホーム(){
      this.$router.push('/home')
    },
    ハンドルアバウト(){
      this.$router.push('/about')
    }
  }
};
</スクリプト>

<スタイル></スタイル>

レンダリング

画像の説明を追加してください

3.7 動的ルーティング

場合によっては、ページのパスが不確かなことがあります。たとえば、ユーザー インターフェイスに入るときに、次のパスが示されることを期待します。
/user/aaaa または /user/bbbb
先頭の/userに加えて、ユーザーのIDも続きます
パスとコンポーネント間のこの一致関係は、動的ルーティング(データ転送をルーティングする方法でもある)と呼ばれます。

1. 構成コンポーネントとパスのマッピング

//ルーティング関連情報を構成するimport Vue from 'vue'
「vue-router」からVueRouterをインポートします。

'../components/Home' から Home をインポートします。
'../components/About' から About をインポートします
'../components/User' から User をインポートします。
// Vue.use(VueRouter) から Vue.use(plugin) までプラグインをインストールします

// VueRouterオブジェクトを作成する constroutes = [
    {
        パス: ''、
        リダイレクト: '/home'
    },
    {
        パス: '/home',
        コンポーネント: ホーム
    },
    {
        パス: '/about',
        コンポーネント: について
    }, 
    <!--これがキーコードです-->
    {
        パス: '/user/:id',
        コンポーネント: ユーザー
    },
]

const ルーター = 新しい VueRouter({
    //ルートとコンポーネントルート間のアプリケーション関係を設定します。
    モード: "履歴"、
    リンクアクティブクラス: "アクティブ"
})

// ルータオブジェクトをVueインスタンスに渡す export default router

2. ユーザーコンポーネント User.vue を作成する

<テンプレート>
    <div>
        <h1>私はAPPページです</h1>
        {{$route.params.id}}
    </div>
</テンプレート>

3. ホームページの表示
アプリ.vue

    <router-link to="/home/Geek Mouse" >ユーザー名を取得するテスト</router-link><br>

4. レンダリング

ここに画像の説明を挿入

4. ルートの遅延読み込み

4.1. 遅延読み込みを理解する

公式の説明は次のとおりです。
アプリをバンドルすると、JavaScript バンドルが非常に大きくなり、ページの読み込み時間に影響する可能性があります。
異なるルートに対応するコンポーネントを異なるコード ブロックに分割し、ルートにアクセスしたときに対応するコンポーネントをロードできれば、より効率的になります。公式は何と言っていますか?
まず、ルートには通常、さまざまなページが定義されていることがわかります。
このページは最終的にどこにパッケージ化されるのでしょうか? 通常は、js ファイル内に配置されます。
ただし、1 つの js ファイルに多数のページを配置すると、必然的にページが非常に大きくなります。
このページをサーバーに一度に要求すると、時間がかかる可能性があり、ユーザーのコンピューターがしばらく空白になることもあります。
この状況を回避するにはどうすればよいでしょうか? ルートの遅延読み込みを使用します。
ルートの遅延読み込みは何をしますか?
ルートの遅延読み込みの主な機能は、ルートに対応するコンポーネントを個別の js コード ブロックにパッケージ化することです。
このルートにアクセスした場合にのみ、対応するコンポーネントがロードされます

4.2. 遅延読み込み効果

//ルーティング関連情報を構成するimport Vue from 'vue'
「vue-router」からVueRouterをインポートします。

const Home = () => import ('../components/Home')
const About = () => import ('../components/About')
const User = () => import ('../components/User')
// Vue.use(VueRouter) から Vue.use(plugin) までプラグインをインストールします

// VueRouterオブジェクトを作成する constroutes = [
    {
        パス: ''、
        リダイレクト: '/home'
    },
    {
        パス: '/home',
        コンポーネント: ホーム
    },
    {
        パス: '/about',
        コンポーネント: について
    }, {
        パス: '/user/:id',
        コンポーネント: ユーザー
    },
]

const ルーター = 新しい VueRouter({
    //ルートとコンポーネントルート間のアプリケーション関係を設定します。
    モード: "履歴"、
    リンクアクティブクラス: "アクティブ"
})

// ルータオブジェクトをVueインスタンスに渡す export default router

4.3. 遅延読み込み方式

ここに画像の説明を挿入

5. ルートのネスト使用

5.1. ネストされたルーティングを理解する

ネストされたルーティングは非常に一般的な機能です。たとえば、ホームページでは、/home/news と /home/message を通じて一部のコンテンツにアクセスする必要があります。
1 つのパスは 1 つのコンポーネントにマップされ、これら 2 つのパスにアクセスすると、それぞれ 2 つのコンポーネントがレンダリングされます。

コンポーネントとパスの関係

ここに画像の説明を挿入

5.2 実装プロセス

1. メッセージとニュースの2つのコンポーネントを作成する

メッセージ.vue

<テンプレート>
  <div id="about">最新ニュース</div>
</テンプレート>
<スクリプト>

</スクリプト>

ニュース.vue

<テンプレート>
  <div id="about">ニュースコンテンツ</div>
</テンプレート>
<スクリプト>

</スクリプト>

2. サブルートを中心にルーティング情報を設定する

'vue' から Vue をインポートします
'vue-router' から VueRouter をインポートします。
const Home = () => import('../components/Home')
const About = () => import('../components/About')
const Message = () => import('../components/Message')
const News = () => import('../components/News')

// 1. Vue.use(プラグイン名) Vue.use(VueRouter); を通じてプラグインをインストールします。

// 2. VueRouterオブジェクトを作成する constroutes = [
    {
        パス:'/home',
        コンポーネント:ホーム、
        子供たち:[
            {
                パス:'ニュース',
                コンポーネント: ニュース
            },
            {
                パス:'メッセージ',
                コンポーネント: メッセージ
            }
        ]
    },
    {
        パス: '/home/:ユーザー名',
        コンポーネント: ホーム
    },
    
    {
        パス: '/about',
        コンポーネント: について
    }
]

// 3. ルーティングとコンポーネント間のマッピング関係を構成する const router = new VueRouter({
    ルート、
    モード: '履歴'、
    // リンクアクティブクラス: 'アクティブ'
})

// 4. ルータオブジェクトをVueインスタンスに渡す export default router

ここに画像の説明を挿入

3. 親コンポーネントが子コンポーネントの情報をレンダリングする

ホーム.vue

<テンプレート>
  <div id="ホーム">
    私はホームページのコンテンツです<br>

    <router-link to="/home/news"> ニュース</router-link>
    <router-link to="/home/message"> メッセージ</router-link>
    <ルータービュー></ルータービュー>
    <!-- <h2>ユーザー名: {{ $route.params.username }}</h2> -->
  </div>
</テンプレート>
<スクリプト>
エクスポートデフォルト{
  名前: "ホーム",
};
</スクリプト>

4. レンダリング

画像の説明を追加してください

5.3. ネストされたルートのデフォルトパス

リダイレクト

{
        パス: '/user',
        コンポーネント: ユーザー、
        子供たち: [
            {
                パス: 'メッセージ',
                コンポーネント: メッセージ、
            },
            {
                パス: 'ニュース',
                コンポーネント: ニュース、
            },
            // /user/news をリダイレクト
            {
                パス: ''、
                リダイレクト: 'ニュース'、
            },
        ]
    },

6. ルーティングパラメータ

渡されるパラメータには、主に2つの種類があります: paramsとquery
パラメータタイプ

1. ルーティング形式を設定する: /router/:id

2. 転送方法: 対応する値のパスをたどる

3. 送信後に形成されたパス: /router/123、/router/abc

クエリタイプ

1. ルーティングフォーマットを設定します: /router、これは通常の設定です

2. 転送方法: オブジェクトで使用されるクエリキーは送信方法として使用されます

3. 送信後に形成されたパス: /router?id=123,/router?id=abc

6.1. 準備

渡されたパラメータの1つ: router-link

1. コンポーネントProfile.vueを作成する

<テンプレート>
  <div>
    <h2>私はプロフィールページです</h2>
    <p>私のプロフィールページの詳細</p>
    <!-- 文字列入力を取得します。例: /profile/123 -->
    <p>$route.params:{{ $route.params }}</p>
    <!-- オブジェクト タイプ入力パラメータを取得します (例: /profile?name=1&age=10) -->
    <p>$route.query:{{ $route.query }}</p>
  </div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
  名前:「プロフィール」、
};
</スクリプト>

<スタイルスコープ>
</スタイル>

2. ルーティングを構成する

const Profile = () => import('../components/Profile')
    {
        パス: '/profile/:id',
        コンポーネント: プロファイル
    }

3. app.vue ページ表示

 <ルータリンク
      :to="{
        パス: '/profile/' + 123,
        クエリ: { 名前: 'geekmice'、趣味: 'バスケットボール' }
      }"
      タグ="ボタン"
      >router-link はパラメータを渡します</router-link
    >

4. 最終効果

ここに画像の説明を挿入

パラメータの受け渡し 2: js 実装

    <button @click="jsTransferParams">js 転送パラメータ</button>
   jsTransferParams() {
      this.$router.push({
        パス: "/profile/" + 666,
        クエリ: { 名前: "geekmice", 趣味: "ブラックテクノロジーの探求" },
      });
    },
    
    profile.vue はパラメータを取得します <p>$route.params:{{ $route.params }}</p>
    <p>$route.query:{{ $route.query }}</p>

ここに画像の説明を挿入

6.2. パラメータを取得する

$route オブジェクトを通じてパラメータを取得します。

vue-router を使用するアプリケーションでは、ルーティング オブジェクトが各コンポーネントに挿入され、this.$route に割り当てられ、ルートが切り替えられるとルーティング オブジェクトが更新されます。
$routeによって渡される情報は次のとおりです

ここに画像の説明を挿入

6.3、ルーターとルートの違い

簡単に言えば、1 つはルーティング情報を取得するために使用され、もう 1 つはルーティングを操作するために使用されます。

$router は VueRouter インスタンスです。別の URL に移動する場合は、$router.push メソッドを使用して、ジャンプ メソッド、フック関数などをルーティングします。

$route は現在のルーター リダイレクト オブジェクトであり、name、meta、path、hash、query、params、fullPath、matched、redirectedFrom などを取得できます。

7. ルーティングナビゲーションガード

vue-routerが提供するナビゲーションガードは、主にルートの入口と出口を監視するために使用されます。
vue-router は beforeEach および afterEach フック関数を提供しており、ルートが変更される前と後にトリガーされます。

beforeEachを使用してタイトルの変更を完了します

  • まず、フックにいくつかのタイトルを定義します。これはメタを使用して定義できます。
  • 次に、ナビゲーションガードを使用してタイトルを変更します
//ルーティング関連情報を構成するimport Vue from 'vue'
「vue-router」からVueRouterをインポートします。

const Home = () => import('../components/Home')
const About = () => import('../components/About')
const User = () => import('../components/User')
const Message = () => import('../components/Message')
const News = () => import('../components/News')
const Profile = () => import('../components/Profile')

// Vue.use(VueRouter) から Vue.use(plugin) までプラグインをインストールします

// VueRouterオブジェクトを作成する constroutes = [
    {
        パス: ''、
        リダイレクト: '/home'
    },
    {
        パス: '/home',
        コンポーネント: ホーム、
        メタ: {
            タイトル: 「ホーム」
        }
    },
    {
        パス: '/profile/:id',
        コンポーネント: プロファイル、
        メタ: {
            タイトル: 「アーカイブ」
        }
    },
    {
        パス: '/about',
        コンポーネント: について、
        メタ: {
            タイトル: 「概要」
        }
    }, {
        パス: '/user',
        コンポーネント: ユーザー、
        子供たち: [
            {
                パス: 'メッセージ',
                コンポーネント: メッセージ、
            },
            {
                パス: 'ニュース',
                コンポーネント: ニュース、
            },
            {
                パス: ''、
                リダイレクト: 'ニュース'、
            },
        ]
    },
]

const ルーター = 新しい VueRouter({
    //ルートとコンポーネントルート間のアプリケーション関係を設定します。
    モード: "履歴"、
    リンクアクティブクラス: "アクティブ"
})

router.afterEach((to, from, next) => {
    ドキュメントのタイトル = to.matched[0].meta.title;
    次()
})

// ルータオブジェクトをVueインスタンスに渡す export default router

レンダリング

画像の説明を追加してください

簡単な説明

ナビゲーションフックの3つのパラメータの分析

  • to: 入力するターゲットのルーティングオブジェクト
  • from: 現在のナビゲーションがこれから出発するルートオブジェクト
  • このメソッドを呼び出した後、次のフックに入ることができます

8. キープアライブ

このコンポーネントは Vue の組み込みコンポーネントであり、コンポーネントの切り替え中に状態をメモリ内に保持して、DOM の繰り返しレンダリングを防ぐことができます。
理解するためのケース説明

要件: KeepStart と KeepEnd の 2 つのコンポーネントがあります。KeepStart コンポーネントには入力ボックスがあり、入力情報をキャッシュできます。KeepEnd コンポーネントはキャッシュできません。

ソースコードの実装
1.KeepStart.vue

<テンプレート>
    <div>
        <h1>スタートページ</h1>
        <input type="text" placeholder="入力してください..."">
    </div>
</テンプレート>

2. KeepEnd.vue

<テンプレート>
    <div>
        <h1>ページをキャッシュする必要はありません</h1>
        <input type="text" placeholder="入力してください">
    </div>
</テンプレート>

3. ルーター->index.js

const KeepStart = () => import('../components/KeepStart')
const KeepEnd = () => import('../components/KeepEnd')
  {
        パス: '/keepStart',
        コンポーネント: KeepStart、
        名前:'keepStart',
        メタ: {
            キープアライブ: 真
        }
    },
    {
        パス: '/keepEnd',
        名前:'keepEnd',
        コンポーネント: KeepEnd、
        メタ: {
            キープアライブ: 偽
        }
    }

4. アプリ

    <router-link to="/keepStart" tag="button">keepstart ページ</router-link>
    <router-link to="/keepEnd" tag="button">keepend ページ</router-link>
    <!-- 動的レンダリング コンポーネント -->
    <!-- <ルータービュー></ルータービュー> -->
    <キープアライブ>
      <ルータービュー v-if="$route.meta.keepAlive"></ルータービュー>
    </キープアライブ>
    <ルータービュー v-if="!$route.meta.keepAlive"></ルータービュー>

レンダリング

画像の説明を追加してください

9. タブバーの練習

9.1. 要件ステートメント

レンダリング

画像の説明を追加してください

説明<br /> カテゴリ、ホーム、ショッピング カート、マイの 4 つの列を持つナビゲーション バーを実装します。ユーザーは各列をクリックして、異なるページを表示します。スロットの概念を使用してスケーラビリティを実現します。

9.2 需要分析

  • 1. 以下に別のTabBarコンポーネントがある場合、それをインストールする方法

TabBarコンポーネントをカスタマイズしてアプリで使用する

下部にタブバーを作成し、関連するスタイルを設定します

  • 2. TabBarに表示されるコンテンツは外部で決定される

スロットの定義

フレックスレイアウト評価 TabBar

  • 3. TabBarItemをカスタマイズし、画像やテキストを渡すことができます

TabBarItemを定義し、画像とテキストの2つのスロットを定義します。

2つのスロットにスタイル用の外側のラッパーdivを追加します

スロットを埋めて下部のタブバーの効果を実現します

  • 4. 選択したハイライト画像を渡す

アクティブアイコンのデータを挿入するための別のスロットを定義します

変数isActiveを定義し、v-showを使用して対応するアイコンを表示するかどうかを決定します。

  • 5. TabBarItemはルーティングデータをバインドする

ルーティングをインストールする npm install vue-router --save

router->index.jsを完成させ、対応するコンポーネントを作成します。

main.jsはルーターを登録します

App.vue はルータービューコンポーネントのレンダリングを追加します

  • 6. 項目をクリックして対応するルーティングテーブルにジャンプし、isActiveを動的に設定します。

アイテムのクリックをリッスンし、ルーティング パスを this.$router.replace() で置き換えます。

アクティブかどうかを判断するには、this.$route.path.indexOf(this.link) !== -1 を使用します。

  • 7. アクティブスタイルを動的に計算する

新しい計算プロパティ this.isActive をカプセル化します。{'color':'red'}:{}

9.3. 需要の実現

実装バージョン1

Vueプロジェクトを作成する

vue ナビゲーションバーを作成する

不要なコンポーネントを削除する HelloWorld イメージ

シンプルなディレクトリ構造

ここに画像の説明を挿入

アプリ.vue

<テンプレート>
  <div id="アプリ">
    <div id="タブバー">
      <div id="tab-bar-item">ホーム</div>
      <div id="tab-bar-item">カテゴリー</div>
      <div id="tab-bar-item">ショッピングカート</div>
      <div id="tab-bar-item">マイ</div>
    </div>
  </div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
  名前:「アプリ」、
  コンポーネント: {},
};
</スクリプト>

<スタイル>
/* CSS スタイルをインポート */
@import url("./assets/css/base.css");

#タブバー{
  ディスプレイ: フレックス;
  背景色: rgb(246, 246, 246);

  /* 絶対位置指定 */
  位置: 固定;
  左: 0;
  下部: 0;
  右: 0;
}

#タブバー項目 {
  フレックス: 1;
  テキスト配置: 中央;
  高さ: 49px;


}
</スタイル>

ベース.css

体{
    パディング: 0;
    マージン: 0;
}

レンダリング

ここに画像の説明を挿入

最終版<br /> ディレクトリ構造

ここに画像の説明を挿入

主要なソースコードの実装

TabBar.vue パッケージ

<テンプレート>
  <div id="タブバー">
    <スロット></スロット>
  </div>
</テンプレート>

<スクリプト>
  エクスポートデフォルト{
    名前: "タブバー"
  }
</スクリプト>

<スタイルスコープ>
  #タブバー{
    ディスプレイ: フレックス;
    背景色: #f6f6f6;

    位置: 固定;
    左: 0;
    右: 0;
    下部: 0;

    ボックスの影: 0 -1px 1px rgba(100,100,100,.2);
  }
</スタイル>

TabBarItem.vue パッケージ

<テンプレート>
  <!--すべてのアイテムに同じ画像とテキストが表示されます-->
  <div class="タブバーアイテム" @click="itemClick">
    <div v-if="!isActive"><スロット名="アイテムアイコン"></スロット></div>
    <div v-else><slot name="item-icon-active"></slot></div>
    <div :style="activeStyle"><slot name="item-text"></slot></div>
  </div>
</テンプレート>

<スクリプト>
  エクスポートデフォルト{
    名前: "TabBarItem",
    小道具: {
      パス: 文字列、
      アクティブカラー: {
        タイプ: 文字列、
        デフォルト: '赤'
      }
    },
    データ() {
      戻る {
        // アクティブ: true
      }
    },
    計算: {
      アクティブです() {
        // /home -> item1(/home) = true
        // /home->item1(/category) = false
        // /home->item1(/cart) = true
        // /home->item1(/profile) = true
        this.$route.path.indexOf(this.path) !== -1 を返します
      },
      アクティブスタイル() {
        this.isActive を返しますか? {color: this.activeColor} : {}
      }
    },
    メソッド: {
      アイテムクリック() {
        this.$router.replace(this.path)
      }
    }
  }
</スクリプト>

<スタイルスコープ>
  .タブバー項目 {
    フレックス: 1;
    テキスト配置: 中央;
    高さ: 49px;
    フォントサイズ: 14px;
  }

  .タブバーアイテム画像 {
    幅: 24px;
    高さ: 24px;
    上マージン: 3px;
    垂直位置合わせ: 中央;
    下マージン: 2px;
  }
</スタイル>

ルーティングを設定するindex.js

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

const Home = () => import('../views/home/Home')
const カテゴリー = () => インポート('../views/category/カテゴリー')
const Cart = () => import('../views/cart/Cart')
const Profile = () => import('../views/profile/Profile')

// 1. プラグインをインストールする Vue.use(VueRouter)

// 2. ルーティングオブジェクトを作成する constroutes = [
  {
    パス: ''、
    リダイレクト: '/home'
  },
  {
    パス: '/home',
    コンポーネント: ホーム
  },
  {
    パス: '/category',
    コンポーネント: カテゴリ
  },
  {
    パス: '/cart',
    コンポーネント: カート
  },
  {
    パス: '/profile',
    コンポーネント: プロファイル
  }
]
const ルーター = 新しい VueRouter({
  ルート、
  モード: '履歴'
})

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

最終結果

ここに画像の説明を挿入

VueRouter ルーティングに関するこの記事はこれで終わりです。VueRouter ルーティングに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue3ルーティングVueRouter4を使用する簡単な例
  • VueRouterのaddRoutesメソッドを使用して、ユーザー権限ルートを動的に追加する
  • VueRouter の高度なナビゲーションフックとルーティングメタ情報の詳細な説明
  • Vue 学習 - VueRouter ルーティングの基礎

<<:  Docker での Redis 接続の急増をトラブルシューティングした実践的な記録

>>:  MySqlを最適化するためにnot inを使用する方法

推薦する

Dockerコンテナの中国語言語パックの設定の問題を解決する

Dockerでdocker search centosを使用する場合docker pull dock...

Eclipse/Tomcat でホットデプロイメントとホットスタートを実装する方法

1. ホット デプロイメント: コンテナの実行中にプロジェクト全体を再デプロイすることを意味します。...

MySQL 外部キー制約の詳細な説明

公式ドキュメント: https://dev.mysql.com/doc/refman/5.7/en/...

Dockerコンテナの接続と通信の実装

ポート マッピングは、Docker を別のコンテナーに接続する唯一の方法ではありません。 Docke...

LinuxでSVNサーバーを構築する方法

1: SVNをインストールする yum インストール -y サブバージョン2. 倉庫を作る1: 倉庫...

Vue はネストされたルーティングメソッドの例を実装します

1. ネストされたルーティングはサブルーティングとも呼ばれます。実際のアプリケーションでは、通常、ネ...

CentOS7にMariaDB 10.2.4をインストールする方法の詳細な説明

CentOS 6 以前のバージョンでは、MySQL サーバー/クライアント インストール パッケージ...

カレンダー効果を実現するJavaScript

この記事では、カレンダー効果を実現するためのJavaScriptの具体的なコードを参考までに紹介しま...

Centos7 でスーパーバイザ デーモンをインストールして設定する方法

初心者は自分で録音しましょう1. スーパーバイザーをインストールします。 Supervisor は ...

MySQLで重複データを削除する詳細な例

MySQLで重複データを削除する詳細な例重複レコードには 2 つの意味があります。1 つは完全に重複...

jsはシンプルなカウントダウンを実装します

この記事の例では、参考までに簡単なカウントダウンを実装するためのjsの具体的なコードを共有しています...

Dockerfile 内の予約語命令の解析処理

目次1. Dockerfile とは何ですか? 2. Dockerfile構築プロセスの分析3. D...

MySQL 8.0.23 のインストールと設定方法のグラフィックチュートリアル (Win10 の場合)

この記事では、MySQL 8.0.23のインストールと設定方法を参考までに紹介します。具体的な内容は...

Windows での MySQL 8.0.13 解凍バージョンのインストール グラフィック チュートリアル

この記事では、参考までにMySQL 8.0.13のインストールグラフィックチュートリアルを紹介します...

JavaScript でウェブ プレーヤーを実装する

今日は、JavaScript を使用して Web ページ上にプレーヤーを作成する方法を紹介します。誰...