vueルーター1. ルーティングの概念を理解する1.1 ルーティングとは何ですか?相互接続されたネットワークを介して送信元アドレスから宛先アドレスに情報を転送するアクティビティ。 1.2. バックエンドルーティングステージウェブサイト開発の初期には、HTML ページ全体がサーバーによってレンダリングされていました。 1.3. フロントエンドルーティングステージフロントエンドとバックエンドの分離段階: 1.4. フロントエンドレンダリングとバックエンドレンダリング?フロントエンド レンダリング: サーバーは対応する HTML ページを直接生成してレンダリングし、クライアントに返して表示します。例: jspページ バックエンド レンダリング: バックエンドは JSON データを返し、フロントエンドは事前に記述された HTML テンプレートを使用して JSON データをループし、文字列を連結してページに挿入します。 2. フロントエンドルーティングルール2.1. URLハッシュ場所の説明 location.href効果によりページ全体が更新されます location.hash の完全更新ではなく部分更新 2.2. HTML5 履歴モード
機能: 先入れ後出し pushState: スタックにプッシュ back: スタックからポップアウト 効果は以下のとおりです
後戻りはできない
3. ルートビューの基本3.1 vue-routerを理解する
3.2. vue-routerをインストールして使用する
ルーティングオブジェクトをインポートし、Vue.use(VueRouter) を呼び出します。 ルーティングインスタンスを作成し、ルーティングマップ構成を渡します 作成したルーティングインスタンスをvueインスタンスにマウントする
ルーティングコンポーネントの作成 ルートマッピング、コンポーネント、パスマッピングの関係を構成する
<テンプレート> <div> <h2>私は</h2> <p>私はコンテンツが大事です、へへ</p> </div> </テンプレート> <スクリプト> エクスポートデフォルト{ 名前: 「概要」 } </スクリプト> <スタイルスコープ> </スタイル>
<テンプレート> <div> <h2>私はホームページです</h2> <p>私はホームページのコンテンツです、ハハハ</p> </div> </テンプレート> <スクリプト> エクスポートデフォルト{ 名前: 「ホーム」 } </スクリプト> <スタイルスコープ> </スタイル>
// VueRouterオブジェクトを作成する constroutes = [ { パス: ''、 <!--ルーティングのデフォルト値--> // デフォルトページはホームページリダイレクトに直接ロードされます: '/home' }, { パス: '/home', コンポーネント: ホーム }, { パス: '/about', コンポーネント: について }, ] const ルーター = 新しい VueRouter({ //ルートとコンポーネントルート間のアプリケーション関係を設定します。 モード:"履歴", リンクアクティブクラス:"アクティブ" })
<テンプレート> <div id="アプリ"> <router-link to="/home">ホーム</router-link> <router-link to="about">について</router-link> <ルータービュー/> </div> </テンプレート> 一般的なプロセス
2. デフォルトで生成されたHelloWorldコンポーネント関連情報を削除する
<テンプレート> <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
<テンプレート> <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. ルーティングのデフォルトパス
構成解析
3.4. HTML5 履歴モードデフォルトページはURLのハッシュモードです HTML5で履歴に変更したい場合は、次のように設定します。 後 3.5. ルータリンク補足
このメソッドはルーティング設定の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 動的ルーティング場合によっては、ページのパスが不確かなことがあります。たとえば、ユーザー インターフェイスに入るときに、次のパスが示されることを期待します。 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. ホームページの表示 <router-link to="/home/Geek Mouse" >ユーザー名を取得するテスト</router-link><br> 4. レンダリング 4. ルートの遅延読み込み4.1. 遅延読み込みを理解する公式の説明は次のとおりです。 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 を通じて一部のコンテンツにアクセスする必要があります。 コンポーネントとパスの関係 5.2 実装プロセス1. メッセージとニュースの2つのコンポーネントを作成する
<テンプレート> <div id="about">最新ニュース</div> </テンプレート> <スクリプト> </スクリプト>
<テンプレート> <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. 親コンポーネントが子コンポーネントの情報をレンダリングする
<テンプレート> <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. コンポーネント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. 最終効果
<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 に割り当てられ、ルートが切り替えられるとルーティング オブジェクトが更新されます。 6.3、ルーターとルートの違い簡単に言えば、1 つはルーティング情報を取得するために使用され、もう 1 つはルーティングを操作するために使用されます。 $router は VueRouter インスタンスです。別の URL に移動する場合は、$router.push メソッドを使用して、ジャンプ メソッド、フック関数などをルーティングします。 $route は現在のルーター リダイレクト オブジェクトであり、name、meta、path、hash、query、params、fullPath、matched、redirectedFrom などを取得できます。 7. ルーティングナビゲーションガードvue-routerが提供するナビゲーションガードは、主にルートの入口と出口を監視するために使用されます。
//ルーティング関連情報を構成する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 レンダリング 簡単な説明
8. キープアライブこのコンポーネントは Vue の組み込みコンポーネントであり、コンポーネントの切り替え中に状態をメモリ内に保持して、DOM の繰り返しレンダリングを防ぐことができます。
ソースコードの実装 <テンプレート> <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 需要分析
TabBarコンポーネントをカスタマイズしてアプリで使用する 下部にタブバーを作成し、関連するスタイルを設定します
スロットの定義 フレックスレイアウト評価 TabBar
TabBarItemを定義し、画像とテキストの2つのスロットを定義します。 2つのスロットにスタイル用の外側のラッパーdivを追加します スロットを埋めて下部のタブバーの効果を実現します
アクティブアイコンのデータを挿入するための別のスロットを定義します 変数isActiveを定義し、v-showを使用して対応するアイコンを表示するかどうかを決定します。
ルーティングをインストールする npm install vue-router --save router->index.jsを完成させ、対応するコンポーネントを作成します。 main.jsはルーターを登録します App.vue はルータービューコンポーネントのレンダリングを追加します
アイテムのクリックをリッスンし、ルーティング パスを this.$router.replace() で置き換えます。 アクティブかどうかを判断するには、this.$route.path.indexOf(this.link) !== -1 を使用します。
新しい計算プロパティ this.isActive をカプセル化します。{'color':'red'}:{} 9.3. 需要の実現実装バージョン1
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; } </スタイル>
体{ パディング: 0; マージン: 0; }
最終版<br /> ディレクトリ構造 主要なソースコードの実装
<テンプレート> <div id="タブバー"> <スロット></スロット> </div> </テンプレート> <スクリプト> エクスポートデフォルト{ 名前: "タブバー" } </スクリプト> <スタイルスコープ> #タブバー{ ディスプレイ: フレックス; 背景色: #f6f6f6; 位置: 固定; 左: 0; 右: 0; 下部: 0; ボックスの影: 0 -1px 1px rgba(100,100,100,.2); } </スタイル>
<テンプレート> <!--すべてのアイテムに同じ画像とテキストが表示されます--> <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; } </スタイル>
'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 をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Docker での Redis 接続の急増をトラブルシューティングした実践的な記録
>>: MySqlを最適化するためにnot inを使用する方法
Dockerでdocker search centosを使用する場合docker pull dock...
1. ホット デプロイメント: コンテナの実行中にプロジェクト全体を再デプロイすることを意味します。...
公式ドキュメント: https://dev.mysql.com/doc/refman/5.7/en/...
ポート マッピングは、Docker を別のコンテナーに接続する唯一の方法ではありません。 Docke...
1: SVNをインストールする yum インストール -y サブバージョン2. 倉庫を作る1: 倉庫...
1. ネストされたルーティングはサブルーティングとも呼ばれます。実際のアプリケーションでは、通常、ネ...
CentOS 6 以前のバージョンでは、MySQL サーバー/クライアント インストール パッケージ...
この記事では、カレンダー効果を実現するためのJavaScriptの具体的なコードを参考までに紹介しま...
初心者は自分で録音しましょう1. スーパーバイザーをインストールします。 Supervisor は ...
MySQLで重複データを削除する詳細な例重複レコードには 2 つの意味があります。1 つは完全に重複...
この記事の例では、参考までに簡単なカウントダウンを実装するためのjsの具体的なコードを共有しています...
目次1. Dockerfile とは何ですか? 2. Dockerfile構築プロセスの分析3. D...
この記事では、MySQL 8.0.23のインストールと設定方法を参考までに紹介します。具体的な内容は...
この記事では、参考までにMySQL 8.0.13のインストールグラフィックチュートリアルを紹介します...
今日は、JavaScript を使用して Web ページ上にプレーヤーを作成する方法を紹介します。誰...