Vue の下部ナビゲーション バー TabBar を実装するための非常に詳細なチュートリアル

Vue の下部ナビゲーション バー TabBar を実装するための非常に詳細なチュートリアル

プロジェクト紹介:

要件: タブバー内のテキストは動的に変更され、テキストに対応する画像は動的に変更および追加され、それに応じてテキストの色が変更され、TabBarItem の画像は動的に変更および追加され、プロジェクト全体が柔軟で、親コンポーネントと子コンポーネント間のスロット、ルーティング、および値の転送が使用される必要があります。項目をクリックしたときに対応するページを表示するには、$router を使用する必要があります。非常に包括的です。プロジェクト開発中に類似のプロジェクトに遭遇した場合、メインコードをコピーするだけで、プロジェクトの一般的なフレームワークを構築できます。

プロジェクトディレクトリ:

VueはTabBar下部ナビゲーションバーコンポーネントを実装します

VueはTabBar下部ナビゲーションバーコンポーネントを実装します

TabBar 効果のプレビュー:

vueTabBar コンポーネントのカプセル化

TabBar 実装のアイデア

1. 下に別のTabBarコンポーネントがある場合、それをカプセル化する方法

  1. タブバー コンポーネントをカスタマイズして、APP で使用します。
  2. 下部に TabBar を作成し、関連するスタイルを設定します。

2. TabBar の実際のコンテンツは外部によって決定されます。

  1. スロットを定義します。
  2. Flex レイアウト評価 TabBar。

3. TabBarItemをカスタマイズし、画像やテキストを渡すことができます

  1. tabbarItem をカスタマイズし、画像とテキストの 2 つのスロットを定義します。
  2. スタイル設定のため、2 つのスロットに外側のラッパー div を指定します。
  3. スロットを埋めて、下部の TabBar の効果を実現します。

この方法は実行可能です。まずは実装してみましょう。ディレクトリを導入しましょう

プロジェクトファイルディレクトリの作成

VueはTabBar下部ナビゲーションバーコンポーネントを実装します

VueはTabBar下部ナビゲーションバーコンポーネントを実装します

ファイルディレクトリの紹介

5 つのファイルを含む views フォルダーを作成しました。5 つのファイルには、ナビゲーション バーの下の各ボタンに対応する 5 つの vue ファイルが含まれています。

VueはTabBar下部ナビゲーションバーコンポーネントを実装します

タブバー ボタンに必要な画像と基本クラスを配置するために、assets の下に css および img フォルダーを作成します。

VueはTabBar下部ナビゲーションバーコンポーネントを実装します

コンポーネント フォルダーに MainTabBar.vue ファイルと tabbar フォルダーを作成します。MainTabBar のサブコンポーネントとさまざまなスロット関連のファイルを tabbar フォルダーに配置します。

VueはTabBar下部ナビゲーションバーコンポーネントを実装します

ルーターフォルダ内のインデックスファイルはルーティングファイルを構成する

VueはTabBar下部ナビゲーションバーコンポーネントを実装します

main.js はプロジェクトのエントリ ファイルです。プロジェクト内のすべてのページは main.js を読み込むため、main.js には 3 つの主な機能があります。

  • VUEをインスタンス化する
  • ネットワークリクエストのaxiosやvue-resource、画像の遅延読み込みモジュールvue-;azyloadなど、頻繁に使用するプラグインやCSSスタイルをプロジェクトに配置します。
  • 基本情報などのグローバル変数を保存します。

各フォルダ内のコード実装

最初のステップは、ファイルエイリアスを作成することです。

解決オブジェクトを見つけて、各ファイルのエイリアスを alias に書き込みます。

VueはTabBar下部ナビゲーションバーコンポーネントを実装します

ファイルエイリアスコード

コード:

解決する: {
    拡張子: ['.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 画像リソース

VueはTabBar下部ナビゲーションバーコンポーネントを実装します

VueはTabBar下部ナビゲーションバーコンポーネントを実装します

VueはTabBar下部ナビゲーションバーコンポーネントを実装します

VueはTabBar下部ナビゲーションバーコンポーネントを実装します

VueはTabBar下部ナビゲーションバーコンポーネントを実装します

VueはTabBar下部ナビゲーションバーコンポーネントを実装します

VueはTabBar下部ナビゲーションバーコンポーネントを実装します

VueはTabBar下部ナビゲーションバーコンポーネントを実装します

実装完了〜

要約:

このプロジェクトは非常に包括的で、スロット、ルーティング、サブコンポーネントと親コンポーネントの値の転送、エイリアス設定に関するさまざまな知識が含まれています。
プロジェクトの動的コンテンツ: タブバーのテキスト、画像、色は動的に変更でき、同様のプロジェクトでは次回これらのファイルを直接参照できます。

主な困難点:

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 を応援して頂ければ幸いです。

以下もご興味があるかもしれません:
  • Vue カスタム下部ナビゲーションバー タブバー実装コード
  • Vue ボトムナビゲーションバーコンポーネントの詳細な説明
  • vue.js の下部ナビゲーションバーの第一階層ルート表示でサブルートが表示されない問題の解決方法

<<:  インタラクティブデザインでページングと読み込みのどちらを選択するかについての説明

>>:  Windows Server 2012 でファイル サーバーを構築するための詳細な手順

推薦する

Mysql binlog ログファイルが大きすぎる場合の解決策

目次1. 関連するbinlog設定2. binlogに関する詳細設定2.1 バイナリログモードの変更...

CentOS 7 で Docker のポート転送をファイアウォールと互換性のあるように設定する方法

CentOS 7 では、次のようなコマンドを使用してホスト ポートをコンテナー ポートにマッピングす...

MySQLの始め方から諦め方まで徹底解説 - インストール

学ぶ内容1. ソフトウェアのインストールとサーバーの設定。 2. (オプションですが、強くお勧めしま...

Vueタイマーの実装方法

この記事では、参考までにタイマーを実装するためのVueの具体的なコードを紹介します。具体的な内容は次...

CSSは高さを設定せずにdivを完全に中央に配置することを実現します

必要とする本文の下のdivは垂直方向に中央揃えになっていますdiv 内のテキストを垂直中央に配置する...

MySQL 8 の新機能: 非表示のインデックス

背景インデックスは諸刃の剣です。クエリ速度は向上しますが、DML 操作も遅くなります。結局のところ、...

JavaScript キャンバスは影付きのグラフィックとテキストを実装します

キャンバスを使用して、参照用の影付きのグラフィックとテキストを作成します。具体的な内容は次のとおりで...

MySQLのconcat関連関数の詳細な説明

1. concat() 関数機能: 複数の文字列を 1 つの文字列に連結する構文: concat(s...

Reactにおける制御されたコンポーネントと制御されていないコンポーネントの簡単な分析

目次制御されていないコンポーネント制御コンポーネント知らせ結論は制御されていないコンポーネントフォー...

MySQLで大きなテーブルをエレガントに削除する方法について簡単に説明します

目次1. 切り捨て操作1.1 MySQL truncate はどのような操作を実行しますか? 1.2...

ウェブデザイン研究における XHTML の応用の概要

<br />一般的に、「標準的な Web ページ」のファイル構成は XHTML CSS ...

MySQL にテキストと画像を保存する方法

Oracle の大きなテキスト データ型 Clob 長いテキスト型 (MySQL ではサポートされて...

MySQL エラー「すべての派生テーブルには独自のエイリアスが必要です」の解決方法

MySQL は、マルチテーブルクエリを実行するときにエラーを報告します。 [SQL] SELECT ...

Vueはメニューナビゲーションを実装するためにelement-uiを使用します

この記事では、Element-uiを使用してメニューナビゲーションを実装するVueの具体的なコードを...

ウェブサイトに天気予報を挿入する方法

天気予報をウェブサイトに挿入すると、次のような効果が得られます。次のコードを挿入する必要があります:...