ミニプログラムカスタムタブバーコンポーネントのカプセル化

ミニプログラムカスタムタブバーコンポーネントのカプセル化

この記事の例では、ミニプログラムのカスタムタブバーコンポーネントをカプセル化するための具体的なコードを参考のために共有しています。具体的な内容は次のとおりです。

1. 新しいコンポーネントを作成する: コンポーネントの下にタブバーを作成する

2. コンポーネントの index.wxml 構造は次のとおりです。

<カバービュークラス="タブバー">
 <カバービュークラス="タブバーボーダー"></カバービュー>
 <カバービュー wx:for="{{list}}" wx:key="index" class="tab-bar-item" data-path="{{item.pagePath}}" data-index="{{index}}" bindtap="tabChange">
  <カバーイメージ src="{{tabbarIndex === インデックス ? item.selectedIconPath : item.iconPath}}"></カバーイメージ>
  <カバービュー スタイル="color: {{tabbarIndex === index ? selectedColor : color}}">{{item.text}}</カバービュー>
 </カバービュー>
</カバービュー>

3. コンポーネントの index.wxss 構造は次のとおりです。

.タブバー{
  位置: 固定;
  下部: 0;
  左: 0;
  右: 0;
  高さ: 60px;
  背景: 白;
  ディスプレイ: フレックス;
  パディング下部: env(セーフエリアインセット下部);
}

.タブバーの境界線 {
  背景色: rgba(0, 0, 0, 0.33);
  位置: 絶対;
  左: 0;
  上: 0;
  幅: 100%;
  高さ: 1px;
  変換: スケールY(0.5);
}

.タブバー項目 {
  フレックス: 1;
  テキスト配置: 中央;
  ディスプレイ: フレックス;
  コンテンツの中央揃え: 中央;
  アイテムの位置を中央揃えにします。
  flex-direction: 列;
}

.タブバーアイテムカバー画像{
  幅: 28px;
  高さ: 28px;
  下マージン: 2px;
}

.tab-bar-item カバービュー {
  フォントサイズ: 10px;
}

4. コンポーネントの index.js 構造は次のとおりです。

// ページ/コンポーネント/タブバー/index.js
成分({
  /**
 1. コンポーネントプロパティのリスト*/
  オプション:
    multipleSlots: true // コンポーネントを定義するときにオプションで複数のスロットのサポートを有効にする},
  プロパティ:
    リスト: {
      タイプ: 配列、
      価値: []
    },
    選択された色:{
      タイプ: 文字列、
      価値:''
    },
    色:{
      タイプ: 文字列、
      価値:''
    },
  },

  /**
 2. コンポーネントの初期データ*/
  データ: {
    tabbarIndex: 0 //デフォルトでは最初のタブ要素が表示されます},

  生涯:
    添付() {}
  },

  /**
 3. コンポーネントメソッドリスト*/
  メソッド: {
    //コンポーネントクリックイベントtabChange(e) {
      // 下部バー要素のインデックスを取得します。let index = e.currentTarget.dataset.index;
      this.setData({
        タブバーインデックス:インデックス、
      })
      //triggerEvent はコンポーネントのイベントを取得します //onMyEvent ページから渡されたクリックイベント名 this.triggerEvent('onMyEvent',{
        タブバーインデックス:インデックス、
      })
    },
  }
})

5. コンポーネントの index.json 構造は次のとおりです。

{
  「コンポーネント」:true、
  "コンポーネントの使用": {}
}

6. ページ内のコンポーネントの使用
7. ページの JSON コードは次のとおりです。

{
  "navigationBarTitleText": "テスト",
  "コンポーネントの使用": {
    "mp-tabbar": "../components/tabBar/index"
  }
}

8. ページの wxml コードは次のとおりです。

//タブ1が選択されたときにページに表示されるコンテンツ <view wx:if="{{tabbarIndex == 0}}">111111</view>
//タブ2が選択されたときにページに表示されるコンテンツ <view wx:if="{{tabbarIndex == 1}}">222222</view>
//タブ3が選択されたときにページに表示されるコンテンツ <view wx:if="{{tabbarIndex == 2}}">333333</view>
<mp-tabbar list="{{list}}" id='tabComponent' bind:onMyEvent="tabChange"></mp-tabbar>

9. ページの js コードは次のとおりです。

ページ({
  データ: {
    tabbarIndex:0, // デフォルトの最初のタブ要素の色: "#555555",
    選択された色: "#2ea7e0",
    //ボトムバーリスト: [{
        "テキスト": "市場",
        "アイコンパス": "/images/bazaar.png",
        "選択されたアイコンパス": "/images/bazaar_selected.png",
      },
      {
        "text": "再充電",
        "アイコンパス": "/images/recharge.png",
        "selectedIconPath": "/images/recharge_selected.png",
      }, {
        "text": "艦隊",
        "アイコンパス": "/images/market.png",
        "選択されたアイコンパス": "/images/market_selected.png",
      }
    ]
  },
  /**
   * ライフサイクル機能 - モニターページ表示 */
  onShow: 関数() {
    this.tabComponent = this.selectComponent('#tabComponent');
    selectedColor を this.data.selectedColor とします。
    color = this.data.color とします。
    this.tabComponent.setData({
      選択された色: 選択された色、
      色:色
   })
   コンソールログ(this.tabComponent.data.tabbarIndex)
  },
  //コンポーネントから渡されたデータを取得する tabChange:function(e){
    index = e.detail.tabbarIndex とします。
    this.setData({
      タブバーインデックス:インデックス
    })
    コンソールログ(e.detail.tabbarIndex)
  }
})

最終的な効果は図に示されています。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • WeChatミニプログラム(パート3)タブバー下部ナビゲーションの詳細な紹介
  • タブ(ウィンドウ上部のタブバー)ページ切り替えを実現するWeChatアプレット開発
  • WeChatアプレット開発:タブバーの例の詳細な説明
  • WeChatアプレットは新しいログインページを作成し、タブバーを非表示にします
  • WeChat ミニプログラム公式ダイナミックカスタムボトムタブバーの例
  • uni-app での WeChat アプレットのカスタム タブバーの適応の詳細な説明
  • WeChatアプレット開発におけるタブバーアイコンと色の実装
  • WeChatアプレット開発タブ(ウィンドウ下部のタブバー)ページ切り替え
  • WeChatアプレットタブバーの使用例の詳細な説明
  • WeChatアプレットカスタムタブバーコンポーネントの開発の詳細な説明

<<:  Dockerがsudo操作を使用する必要がある問題を解決する

>>:  HTML 再利用テクニック

推薦する

Vue は Ctrip のカルーセル効果を模倣します (スライディング カルーセル、以下は高度に適応)

まずケースを見てみましょう。vue+swiper を使用して実装します。スライドの高さが異なる場合、...

nginxリバースプロキシのマルチポートマッピングの実装

コードの説明1.1 http:www.baidu.test.com のデフォルトは 80 で、リバー...

MySQL 8の新機能ウィンドウ関数の役割

MySQL 8.0 の新機能は次のとおりです。 Unicode 9.0 をすぐに完全にサポートウィン...

Dockerはプロセス操作を管理するためにSupervisorを使用する

Docker コンテナは、起動時に、たとえば ssh または apache デーモン サービスなどの...

IE6かどうかを判定する最短JS(IEの書き方)

ブラウザが IE のどのバージョンであるかを検出するためによく使用される JavaScript コー...

圧縮パッケージを使用して Linux 環境に JDK 13 をインストールする方法

JDK とは何ですか?まあ、この質問がわからないのであれば、なぜこれをインストールするのか本当にわか...

CentOS 8 カスタム ディレクトリ インストール nginx (チュートリアルの詳細)

1. ツールとライブラリをインストールする# PCRE は、Perl 互換の正規表現ライブラリを含...

MySQL Null は 5 つの問題を引き起こす可能性があります (すべて致命的)

目次1. カウントデータが失われる解決2. 明確なデータ損失3.データ損失を選択解決4. Nullポ...

MySQL と接続関連のタイムアウトの詳細な概要

MySQL と接続関連のタイムアウト序文:今日、同僚から、データ量が多いときに MySQL データベ...

count(1)、count(*)、count(列名)の実行の違いの詳細な説明

実施効果: 1. count(1) と count(*)テーブル内のデータ量が多い場合、テーブルを分...

JavaScript を使用して文字列内の最も繰り返しの多い文字を取得する方法

目次トピック分析する使用目的解決:コードは次のように実装されます。分析:配列とポインタ解決:コードは...

CSS3 で Taobao に空白スペースを実装する方法

Taobao用の空白スペースを作成します。 ブラウザページを縮小すると、コンテンツ領域は縮小されませ...

MySQL 整合性制約の定義と例のチュートリアル

目次整合性制約整合性制約の定義整合性制約の分類主キー制約単一の主キーと複合主キーの違い主キーフィール...

Linux システムでのスケジュールされたタスクの紹介

目次1. 計画タスクをカスタマイズする2. 時間を同期する3. 練習する4. セキュリティの問題1....

SQL 文を使用してデータを収集する場合の sum 関数と count 関数の if 判定条件の使用法の説明

まず、例を挙げてみましょう(読みたくない場合は、以下の要約だけ読んでください)。 order_typ...