問題の説明開発ではタブ切り替えシナリオがよく使用されます。この効果を達成する必要がある場合、私たちはこの効果を達成するために次のような方法を考えることが多いです。
作者は、タブ切り替え効果を実現するには、vue の動的コンポーネントを使用する方が便利だと考えています。 Vueの動的コンポーネントとはVue の動的コンポーネントは、本質的には依然としてコンポーネントです。簡単に言えば、コンポーネントは js ロジックを備えた UI ビュー レイヤーです。いわゆる動的コンポーネントとは、ページ上の特定の場所に表示される特定のコンポーネントを、いくつかの条件に応じて動的に制御できることを意味します。これはタブを切り替えるような感じですね。 アプリケーションシナリオの説明需要効果図 実際には、非常にシンプルで、タブを切り替える効果だけです。 もちろん、実際の開発では、タブのスタイル効果はもう少し複雑になる可能性があります。 実装手順ステップ 1 (新しいコンポーネントを作成し、登録を導入する)まず、タブ切り替えで表示されるコンテンツ部分として、componentsフォルダ内の4つの.vueファイルを定義し、インポートすることで利用できるようになります。 新しい インポートと登録 「./components/one」から1つをインポートします。 「./components/two」から2つをインポートします。 「./components/three」から3つをインポートします。 「./components/four」から 4 をインポートします。 コンポーネント: 1つ、 二、 三つ、 4、 }, ステップ 2 (レイアウト、タブのクリック ラベルを上部に配置し、対応するコンテンツを表示するコンポーネントを下に配置する)<テンプレート> <div id="アプリ"> <div class="top"> <!-- タブのクリック ラベルを配置します --> </div> <div class="bottom"> <!-- 対応するコンテンツを表示するために動的コンポーネントを配置します--> </div> </div> </テンプレート> ステップ 3 (上のタブを記入し、ラベルをクリックします)// まず、クリックされたタブのデータを格納するために、data に配列 cardArr を定義します。data() { 戻る { インデックス: 0, カードArr: [ { コンポーネント名: "動的コンポーネント 1", }, { コンポーネント名: "動的コンポーネント 2", }, { コンポーネント名: "動的コンポーネント 3", }, { コンポーネント名: "ダイナミックコンポーネント4", }, ]、 }; }, // 次に、v-for ループを使用して <template> を表示します。 <div id="アプリ"> <div class="top"> <div クラス="crad" :class="{highLight: whichIndex == index }" v-for="(アイテム、インデックス) in cardArr" :key="インデックス" @click="whichIndex = インデックス" > {{ item.componentName }} </div> </div> <div class="bottom"> <!-- 動的コンポーネントを配置します... --> </div> </div> </テンプレート> // ハイライトされた状態が必要なので、最初にハイライトされるインデックス0を設定します。これは、データで定義されたwhichIndexと:classを使用して実現します。 // ハイライトスタイル.highLight { ボックスの影: 0 15px 30px rgba(0, 0, 0, 0.2); 変換: translate3d(0, -1px, 0); } ステップ4 (動的コンポーネントタグ<component/>を使用する)// 動的コンポーネント タグ <component/> には is 属性があります。is の値によってコンポーネントの値が決まります。 // ここでは変数componentIdを使用して保存し、componentIdを<div class="bottom">として表示します。 <コンポーネント:is="コンポーネントID"></コンポーネント> </div> // デフォルトでは、最初のものを最初に表示します。同時に、cardList 内のコンポーネント名とコンポーネント ID を互いに対応させる必要があります。 // データは次のように変更する必要があります data() { 戻る { インデックス: 0, componentId: "one", // 値は、コンポーネントオブジェクトに登録したインポートされたコンポーネントの名前です。cardArr: [ { コンポーネント名: "動的コンポーネント 1", componentId: "one", // 対応する}, { コンポーネント名: "動的コンポーネント 2", componentId: "two", // 対応する}, { コンポーネント名: "動的コンポーネント 3", componentId: "three", // それに対応する}, { コンポーネント名: "ダイナミックコンポーネント4", componentId: "four", // それに対応する}, ]、 }; }, ステップ 5 (タブ コンポーネントをクリックして、対応する componentId 値を動的に変更します)<テンプレート> <div id="アプリ"> <div class="top"> <div クラス="crad" :class="{highLight: whichIndex == index }" v-for="(アイテム、インデックス) in cardArr" :key="インデックス" @クリック=" whichIndex = インデックス; コンポーネントID = アイテム.コンポーネントID; 「 > <!-- @click タグ内にセミコロンで区切って複数の操作コードを記述できます --> {{ item.componentName }} </div> </div> <div class="bottom"> <!-- キャッシュ コンポーネントをキープアライブ状態に維持します。これにより、コンポーネントが破棄されず、DOM が再レンダリングされなくなります。 ブラウザはリフローや再描画を行わないため、パフォーマンスを最適化できます。使用しない場合は、ページの読み込みが遅くなります。 <キープアライブ> <コンポーネント:is="コンポーネントID"></コンポーネント> </キープアライブ> </div> </div> </テンプレート> 完全なコードは添付されています<テンプレート> <div id="アプリ"> <div class="top"> <div クラス="crad" :class="{highLight: whichIndex == index }" v-for="(アイテム、インデックス) in cardArr" :key="インデックス" @クリック=" whichIndex = インデックス; コンポーネントID = アイテム.コンポーネントID; 「 > {{ item.componentName }} </div> </div> <div class="bottom"> <キープアライブ> <コンポーネント:is="コンポーネントID"></コンポーネント> </キープアライブ> </div> </div> </テンプレート> <スクリプト> 「./components/one」から1つをインポートします。 「./components/two」から2つをインポートします。 「./components/three」から3つをインポートします。 「./components/four」から 4 をインポートします。 エクスポートデフォルト{ コンポーネント: 1つ、 二、 三つ、 4、 }, データ() { 戻る { インデックス: 0, コンポーネントID: "1", カードArr: [ { コンポーネント名: "動的コンポーネント 1", コンポーネントID: "1", }, { コンポーネント名: "動的コンポーネント 2", コンポーネントID: "2", }, { コンポーネント名: "動的コンポーネント 3", コンポーネントID: "3", }, { コンポーネント名: "ダイナミックコンポーネント4", コンポーネントID: "4", }, ]、 }; }, }; </スクリプト> <style lang="less" スコープ> #アプリ { 幅: 100%; 高さ:100vh; ボックスのサイズ: 境界線ボックス; パディング: 50px; .トップ{ 幅: 100%; 高さ: 80px; ディスプレイ: フレックス; コンテンツの両端揃え: スペースを空ける; .crad { 幅: 20%; 高さ: 80px; 行の高さ: 80px; テキスト配置: 中央; 背景色: #fff; 境界線: 1px 実線 #e9e9e9; } .ハイライト{ ボックスの影: 0 15px 30px rgba(0, 0, 0, 0.2); 変換: translate3d(0, -1px, 0); } } 。底 { 上マージン: 20px; 幅: 100%; 高さ: calc(100% - 100px); 境界線: 3px ピンク ディスプレイ: フレックス; コンテンツの中央揃え: 中央; アイテムの位置を中央揃えにします。 } } </スタイル> 上記は、Vue が動的コンポーネントを使用して TAB 切り替え効果を実現する方法の詳細です。Vue が動的コンポーネントを使用して TAB 切り替え効果を実現する方法の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: MySQLデータベースの管理者パスワードを忘れた場合の解決策
>>: Linux ネットワークプログラミングにおけるソケットオプションの実装
基本的な環境設定まずはご自身でドメイン名とサーバーを購入してくださいクラウドサーバーECSに基づいて...
序文今日、自作のコンポーネントを使っていたところ、突然、長い間忘れていたバブリングイベントに遭遇しま...
序文MySQL 5.1.6 以降、非常にユニークな機能であるイベント スケジューラが追加されました。...
binlog は、すべての mysql dml 操作を記録するバイナリ ログ ファイルです。 bin...
1. アクセス頻度、同時接続、ダウンロード速度を制限するために使用されるモジュールと命令の概要ngx...
この記事では、チャット機能を実現するためのVue+express+Socketの具体的なコードを参考...
<br />コンテンツ ページの記事の場合、記事が長すぎる場合やカテゴリ (ランキング)...
フォーラムで、ネットユーザーの jeanjean20 が、Marquee を標準に適合させる方法につ...
導入スロークエリログを有効にすると、MySQL は指定された時間を超えるクエリステートメントを記録で...
Vue プロジェクトの開発プロセスでは、ローカル デバッグの利便性のため、通常、vue.config...
今日は、JavaScript を使用して Web ページ上にプレーヤーを作成する方法を紹介します。誰...
プロジェクトを作成しているときに、ユーザーがアクションを実行し、特定の状態を変更し、ページを更新して...
序文私は以前から、SQL 文がどのように実行され、どのような順序で実行されるのかを知りたいと思ってい...
ペーパーレスの世界はまだ到来していませんが、書類や写真をスキャンすることで紙をなくす人が増えています...
効果画像: html: <div class='site_bar'>ホー...