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

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

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

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 再利用テクニック

推薦する

携帯電話に GreasyFork js スクリプトをインストールするチュートリアル

目次序文1. Iceraven ブラウザ (Firefox) (Android) 2. (アンドロイ...

ダイナミックな波効果を実現するSVG+CSS3

ベクトル波 <svg viewBox="0 0 560 20" class...

MySQLでJSONフィールドを操作する方法

MySQL 5.7.8 では json フィールドが導入されました。このタイプのフィールドは使用頻度...

elasticsearchを使用してインデックスデータを定期的に削除する

1. ESを使うこともあるリソースが限られている、またはビジネス上のニーズにより、最新の期間のデータ...

html+css3で実装されたログインインターフェース

成果を達成するまずHTMLを使って基本的なフレームワークを構築します <本文> <...

MySQL 8.0 Windows zip パッケージ版の詳細なインストール手順

MySQL 8.0 Windows zipのインストール手順は次のように紹介されています。準備する:...

VueはTodoListの例をカプセル化し、ブラウザのローカルキャッシュのアプリケーションを実装します。

この記事では主に、Vue で TodoList をカプセル化するケースと、ブラウザのローカル キャッ...

MySQL グリーンバージョン設定コードと 1067 エラーの詳細

MySQL グリーンバージョン設定コードと 1067 エラーMySQL エンコーディングを表示 &#...

React サーバーサイドレンダリング原則の分析と実践

ほとんどの人は、サーバーサイド レンダリング (SSR と呼んでいます) の概念について聞いたことが...

Dockerfile を使用して nginx イメージを構築する例

Dockerfile の紹介Docker は、Dockerfile の内容を読み取ってイメージを自動...

MySQL ダーティ ページ フラッシュとテーブル スペースの縮小の原理の分析

mysql ダーティページWAL メカニズムにより、InnoDB はステートメントを更新するときに、...

Mysql 日付クエリの詳細な紹介

現在の日付を照会する CURRENT_DATE() を選択します。 CURDATE() を選択する;...

WeChatアプレットのオーディオコンポーネントがiOSで再生できない問題の解決策

解決策:クリック イベントをオーディオ コンポーネントにバインドし、再生メソッドと一時停止メソッドを...

MySQLデスクトップツールSQLyogのリソースとアクティベーション方法は、白黒のコマンドラインに別れを告げます

では、早速リソースについて見ていきましょう。 123WORDPRESS.COM ダウンロードSQLy...