プロジェクト紹介:
プロジェクトディレクトリ: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 でファイル サーバーを構築するための詳細な手順
Linux: Linux バージョン 3.10.0-123.9.3.el7.x86_64 ngin...
アイデア:外側のボックスは背景を設定し、内側のボックスは背景の幅と高さを設定し、ボックスを動かすアニ...
目次必要回避策1. ツールチップを設定する2. hookToolTip変数を定義する3. メソッド内...
目次1. 子プロセス2. nodejsでのコマンド実行2.1 16進数エンコード2.2 ユニコードエ...
ハードウェア上の理由により、機械は標準時間にある程度追いつけない場合があり、その誤差は 1 か月で数...
この記事では主にボタンのスタイルについて説明します。 1. オプション2. サイズ3. 活動状況4....
序文リアルタイムのデータベース バックアップの必要性は非常に一般的です。MySQL 自体はレプリケー...
MySQL が複数のテーブルを結合するときに、次のエラーが報告されます: [Err]1267 – 操...
目次1. テストデータ2. ヌル値による不便3. スペース、空の値、null をどのように判断すれば...
1. 冒頭の2つの単語みなさんこんにちは。私の名前はLin Zonglinです。私はテストエンジニア...
複雑なコンポーネント (クラス コンポーネント) と単純なコンポーネント (関数コンポーネント) を...
具体的なupgradeスクリプトは次のとおりです。インデックスを動的に削除する アップグレードが存在...
静的ファイルNginx は高いパフォーマンスで知られており、フロントエンドのリバース プロキシ サー...
背景コメントに似た機能を開発する場合は、必要に応じてすべてのコメントのサブセットをクエリする必要があ...
目次1: https証明書を準備する2: nginx sslモジュールを準備する3: SSL証明書を...