プロジェクト紹介:
プロジェクトディレクトリ:TabBar 効果のプレビュー:TabBar 実装のアイデア1. 下に別のTabBarコンポーネントがある場合、それをカプセル化する方法
2. TabBar の実際のコンテンツは外部によって決定されます。
3. TabBarItemをカスタマイズし、画像やテキストを渡すことができます
この方法は実行可能です。まずは実装してみましょう。ディレクトリを導入しましょう プロジェクトファイルディレクトリの作成ファイルディレクトリの紹介5 つのファイルを含む views フォルダーを作成しました。5 つのファイルには、ナビゲーション バーの下の各ボタンに対応する 5 つの vue ファイルが含まれています。 タブバー ボタンに必要な画像と基本クラスを配置するために、assets の下に css および img フォルダーを作成します。 コンポーネント フォルダーに MainTabBar.vue ファイルと tabbar フォルダーを作成します。MainTabBar のサブコンポーネントとさまざまなスロット関連のファイルを tabbar フォルダーに配置します。 ルーターフォルダ内のインデックスファイルはルーティングファイルを構成する main.js はプロジェクトのエントリ ファイルです。プロジェクト内のすべてのページは main.js を読み込むため、main.js には 3 つの主な機能があります。
各フォルダ内のコード実装 最初のステップは、ファイルエイリアスを作成することです。 解決オブジェクトを見つけて、各ファイルのエイリアスを alias に書き込みます。 ファイルエイリアスコードコード: 解決する: { 拡張子: ['.js', '.vue', '.json'], エイリアス: { '@': 解決('src')、 'アセット': 解決('src/assets')、 'コンポーネント': 解決('src/components'), 'ビュー': 解決('src/views')、 } }, App.vue コードMainTabBar コンポーネントと、App.vue 内の各 tabbaritem に対応するファイルを参照します。 <テンプレート> <div id="アプリ"> <ルータービュー></ルータービュー> <メインタブバー></メインタブバー> </div> </テンプレート> <スクリプトタイプ="モジュール"> 'components/MainTabBar' から MainTabBar をインポートします。 エクスポートデフォルト{ 名前: 'アプリ'、 コンポーネント:{ メインタブバー } } </スクリプト> <スタイル> @import "assets/css/base"; </スタイル> MainTabBar.vue コードMainTabBar コンポーネント コード: コンポーネントは、TabBarItem の数、色、テキストなどを動的に変更するという要件を満たす必要があります。さまざまなスロットを作成する必要があります。 <テンプレート> <div> <タブバー> <タブバー項目パス="/home" activeColor="紫"> <img slot="item-icon" src="~assets/img/tabbar/shouye.png" alt="" > <img slot="item-icon-active" src="~assets/img/tabbar/shouye.active.png" alt=""> <div slot="item-text">ホーム</div> </タブバー項目> <タブバー項目パス="/カテゴリ" activeColor="紫"> <img slot="item-icon" src="~assets/img/tabbar/fenlei.png" alt=""> <img slot="item-icon-active" src="~assets/img/tabbar/fenlei.active.png" alt=""> <div slot="item-text">カテゴリー</div> </タブバー項目> <タブバーアイテムパス="/カート" activeColor="紫"> <img slot="item-icon" src="~assets/img/tabbar/gouwuche.png" alt=""> <img slot="item-icon-active" src="~assets/img/tabbar/gouwuche.active.png" alt=""> <div slot="item-text">ショッピングカート</div> </タブバー項目> <タブバー項目パス="/プロファイル" activeColor="紫"> <img slot="item-icon" src="~assets/img/tabbar/wode.png" alt=""> <img slot="item-icon-active" src="~assets/img/tabbar/wode.active.png" alt=""> <div slot="item-text">マイ</div> </タブバー項目> </タブバー> </div> </テンプレート> <スクリプト> 'components/tabbar/TabBar' から TabBar をインポートします。 'components/tabbar/TabBarItem' から TabBarItem をインポートします。 エクスポートデフォルト{ 名前:"メインタブバー", コンポーネント:{ タブバー、 タブバーアイテム } } </スクリプト> <スタイル> </スタイル> TabBar.vue コードTabBar.vue ファイルの場合、ファイルを MainTabBar.vue のサブコンポーネントに変更します。 <テンプレート> <div id="タブバー"> <スロット></スロット> </div> </テンプレート> <スクリプト> エクスポートデフォルト{ 名前:'タブバー' } </スクリプト> <スタイル> </スタイル> TabBarItem.vue コードTabBarItem.vueはMainTabBar.vueのサブコンポーネントです。 <テンプレート> <div class="タブバーアイテム" @click="itemClick"> <div v-if="!isActive"> <スロット名="アイテムアイコン"></スロット> </div> <div v-else> <スロット名="アイテムアイコンアクティブ"></スロット> </div> <div :style="activeStyle"><slot name="item-text"></slot></div> </div> </テンプレート> <スクリプト> エクスポートデフォルト{ 名前:"タブバーアイテム", 小道具:{ パス:文字列、 アクティブカラー:{ タイプ:文字列、 デフォルト: '赤' } }, データ(){ 戻る { // アクティブ:true } }, 計算:{ isActive(){ //判断//this.$route.path.indexOf(this.path) !== -1 を返します // this.$route.path === this.path を返します this.$route.path.indexOf(this.path)?false:true を返します。 }, アクティブスタイル(){ this.isActive?{color:this.activeColor}:{} を返します。 } }, 方法:{ アイテムクリック(){ this.$router.replace(this.path) } } } </スクリプト> <スタイル> #タブバー{ ディスプレイ: フレックス; } #タブバー{ 背景色: #f6f6f6; 上境界線: 2px #ccc; 位置: 固定; 左: 0; 右: 0; 下部: 0; ボックスの影:0px -1px 1px rgba(100,100,100,.2); } .タブバー項目{ フレックス: 1; テキスト配置: 中央; 高さ: 49px; フォントサイズ: 14px; } .タブバーアイテム画像{ 幅: 24px; 高さ: 24px; 上マージン: 3px; 垂直位置合わせ: 中央; 下マージン: 3px; } 。アクティブ{ 色: 赤; } </スタイル> index.js ルーティング構成コードルーター フォルダー内のインデックス ファイルはルーティング構成です。 'vue' から Vue をインポートします 'vue-router' から VueRouter をインポートします。 const Home = () => import('views/home/home') const カテゴリー = () => インポート('views/category/category') const Cart = () => import('views/cart/cart') const プロファイル = () => インポート('../views/profile/profile') //1. プラグインをインストールする Vue.use(VueRouter) //2. ルーティングオブジェクトを作成する constroutes = [ { パス:''、 リダイレクト:'/home' }, { パス:'/home', コンポーネント:ホーム }, { パス:'/category', コンポーネント:カテゴリ }, { パス:'/cart', コンポーネント:カート }, { パス:'/profile', コンポーネント:プロファイル } ] const ルーター = 新しい VueRouter({ ルート、 モード:'履歴' }) //3. ルーターをエクスポートする デフォルトルーターをエクスポートする ビュー内のホーム コード、カート コード、プロフィール コード、カテゴリ コード: home.vue コード<テンプレート> <h2>ホーム</h2> </テンプレート> <スクリプト> エクスポートデフォルト{ 名前:"ホーム" } </スクリプト> <スタイル> </スタイル> カテゴリ.vue コード<テンプレート> <h2>カテゴリー</h2> </テンプレート> <スクリプト> エクスポートデフォルト{ 名前:"ホーム" } </スクリプト> <スタイル> </スタイル> profile.vue コード<テンプレート> <h2>個人的</h2> </テンプレート> <スクリプト> エクスポートデフォルト{ 名前:"ホーム" } </スクリプト> <スタイル> </スタイル> cart.vue コード<テンプレート> <h2>ショッピングカート</h2> </テンプレート> <スクリプト> エクスポートデフォルト{ 名前:"ホーム" } </スクリプト> <スタイル> </スタイル> Base.css コードCSS ファイルの base.css の内容: 体{ パディング: 0px; マージン: 0px; } img 画像リソース実装完了〜 要約:このプロジェクトは非常に包括的で、スロット、ルーティング、サブコンポーネントと親コンポーネントの値の転送、エイリアス設定に関するさまざまな知識が含まれています。 主な困難点:1. 対応する TabBarItem をクリックすると、画像の色とテキストの色が変更されます。ここで、現在のアクティブなルートが渡されたアドレスに対応しているかどうかを確認します。対応している場合は true になり、false を返します。 計算:{ isActive(){ //判定 this.$route.path.indexOf(this.path)?false:true を返します }, アクティブスタイル(){ this.isActive?{color:this.activeColor}:{} を返します。 } }, 方法:{ アイテムクリック(){ this.$router.replace(this.path) } } 上記のコードには他のメソッドもあります: this.$route.path.indexOf(this.path) !== -1 を返します this.$route.path === this.path を返します 2. 親コンポーネントの値転送の問題: 親コンポーネントは対応するファイル パスとフォント色を渡し、子コンポーネントはそれを受け入れて使用します。 エクスポートデフォルト{ 名前:"タブバーアイテム", 小道具:{ パス:文字列、 アクティブカラー:{ タイプ:文字列、 デフォルト: '赤' } }, データ(){ 戻る {} }, プロジェクト完了〜 これで、Vue の TabBar 下部ナビゲーション バーの実装に関するこの記事は終了です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援して頂ければ幸いです。 以下もご興味があるかもしれません:
|
<<: インタラクティブデザインでページングと読み込みのどちらを選択するかについての説明
>>: Windows Server 2012 でファイル サーバーを構築するための詳細な手順
目次1. 関連するbinlog設定2. binlogに関する詳細設定2.1 バイナリログモードの変更...
CentOS 7 では、次のようなコマンドを使用してホスト ポートをコンテナー ポートにマッピングす...
学ぶ内容1. ソフトウェアのインストールとサーバーの設定。 2. (オプションですが、強くお勧めしま...
この記事では、参考までにタイマーを実装するためのVueの具体的なコードを紹介します。具体的な内容は次...
必要とする本文の下のdivは垂直方向に中央揃えになっていますdiv 内のテキストを垂直中央に配置する...
背景インデックスは諸刃の剣です。クエリ速度は向上しますが、DML 操作も遅くなります。結局のところ、...
キャンバスを使用して、参照用の影付きのグラフィックとテキストを作成します。具体的な内容は次のとおりで...
1. concat() 関数機能: 複数の文字列を 1 つの文字列に連結する構文: concat(s...
目次制御されていないコンポーネント制御コンポーネント知らせ結論は制御されていないコンポーネントフォー...
目次1. 切り捨て操作1.1 MySQL truncate はどのような操作を実行しますか? 1.2...
<br />一般的に、「標準的な Web ページ」のファイル構成は XHTML CSS ...
Oracle の大きなテキスト データ型 Clob 長いテキスト型 (MySQL ではサポートされて...
MySQL は、マルチテーブルクエリを実行するときにエラーを報告します。 [SQL] SELECT ...
この記事では、Element-uiを使用してメニューナビゲーションを実装するVueの具体的なコードを...
天気予報をウェブサイトに挿入すると、次のような効果が得られます。次のコードを挿入する必要があります:...