プロジェクト紹介:
プロジェクトディレクトリ: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 でファイル サーバーを構築するための詳細な手順
今日は、MySQL IN サブクエリの最適化に関するケーススタディを見ました。最初は少し懐疑的でした...
目次1. フロントエンドのリーディングプロセス: 2. プラグインの使用と初期化2.1 vue-ad...
Win10 システムでの MySQL 8.0.20 のインストールと設定の超詳細なチュートリアルMy...
1. 文法: <meta name="名前" content="...
1. 問題の説明 root@mysqldb 22:12: [xucl]> テーブル t1\G ...
Windows 64ビットでのMySQLのインストールについて説明します。5.7以降、MySQLの...
これは、Web ページを Windows のスタート メニューなどのデスクトップ プログラムのように...
CSS の優先順位について話す前に、CSS とは何か、CSS が何に使用されるのかを理解する必要があ...
MySQL(5.6以下)はjsonを解析します #json 解析関数 DELIMITER $$ `j...
MySql は、私たちが頻繁に使用するデータ ソースです。開発者が練習、小規模なプライベート ゲーム...
1: スループット(1秒あたりのリクエスト数)サーバーの同時処理能力を定量的に表したもので、reqs...
1. offsetParentの定義: offsetParentは子要素に最も近い位置に配置された親...
React は、開発者が Web およびモバイルベースのアプリケーションを作成するために使用するオ...
序文データベースは常に私の弱点でした。自分の経験 (python+sqlalchemy) を組み合わ...
簡単なレビュー: ブラウザの互換性の問題は、しばしば頭痛の種となります。ここでは、これらの問題を回避...