ミニプログラムは、カスタムのマルチレベル単一選択と複数選択を実装します

ミニプログラムは、カスタムのマルチレベル単一選択と複数選択を実装します

この記事では、参考のために、ミニプログラムでカスタムのマルチレベル単一選択および複数選択機能を実装するための具体的なコードを共有します。具体的な内容は次のとおりです。

効果:

追伸:これはコンポーネントにカプセル化したカスタムドロップダウンボックスです

wxml

<view class="select-box">
    <view class="select-title">
        <view class="cell-border">
            <van-field value="{{ layout }}" data-key="layout" placeholder="入力してください" required icon="arrow" label="ハウスタイプ" bind:tap="onChange" />
        </ビュー>
    </ビュー>
    <view class="select-list" wx:if="{{show}}">
        <view class="option" wx:for="{{layouts}}" wx:key="index">
            <view class="{{curItem.checked ? 'option-item-active' : 'option-item'}}" 
                wx:for="{{item.column}}" wx:key="インデックス" 
                wx:for-item="現在のアイテム" 
                データキー="{{curItem.key}}"
                データ-colkey="{{item.colKey}}"
                データ名="{{curItem.name}}" 
                バインド:tap="getOptionItem">
                {{curItem.name}}
            </ビュー>
        </ビュー>
    </ビュー>
</ビュー>

wxss

.選択ボックス{
    幅: 100%;
    パディング: 20rpx;
    ボックスのサイズ: 境界線ボックス;
}
 
.セル境界{
    境界線の半径: 6rpx;
    境界線: 1px 実線 #999;
    下部マージン: 10rpx;
}
.選択リスト{
    ディスプレイ: フレックス;
    flex-direction: 行;
    コンテンツの両端揃え: スペースを空ける;
    幅: 100%;
    高さ: 360rpx;
    パディング: 20rpx;
    ボックスのサイズ: 境界線ボックス;
    背景色: #fff;
    境界線: 1px 実線 #eee;
}
.選択リスト .オプション{
    ディスプレイ: フレックス;
    flex-direction: 列;
    フォントサイズ: 24rpx;
}
.オプション項目{
    幅: 80rpx;
    高さ: 100rpx;
    背景色: #eee;
    テキスト配置: 中央;
    上マージン: 5px;
    パディング: 2px;
 
}
 
.オプション項目アクティブ{
    幅: 80rpx;
    高さ: 100rpx;
    背景色: #FF6600;
    テキスト配置: 中央;
    上マージン: 5px;
    パディング: 2px;
    色:#fff;
}
json
{
    「コンポーネント」:true、
    "コンポーネントの使用": {
      "van-field": "../../vant/field/index",
    }
  }

js

ps:dataはコンポーネント自体のデータであり、layoutsはデータソースです

成分({
    プロパティ:
        
    },
    データ:{
        表示:false、
        現在のキー:-1、
        列キー:-1、
        レイアウト:[
            {
                列キー:0,
                カラム:[
                    {名前:"部屋1",キー:0,},
                    {名前:"部屋2",キー:1,},
                    {name:"部屋3",キー:2,},
                    {name:"部屋4",key:3,},
                    {name:"部屋5",key:4,},
                    {name:"部屋6",key:5,} ]
            },
            {
                列キー:1、
                カラム:[
                    {name:"ホール1",key:0,},
                    {name:"ホール2",key:1,},
                    {name:"ホール3",key:2,},
                    {name:"部屋4",key:3,},
                    {name:"ホール5",key:4,},
                    {name:"部屋6",key:5,} ]
            },
            {
                列キー:2,
                カラム:[
                {名前:"1 キッチン",キー:0,},
                {名前:"2 シェフ",キー:1,},
                {名前:"3 シェフ",キー:2,},
                {名前:"4 シェフ",キー:3,},
                {名前:"5 シェフ",キー:4,},
                {name:"6 シェフ",key:5,}]
            },
            {
                列キー:3,
                カラム:[
                {name:"1 ガード",key:0,},
                {name:"2 ガード",key:1,},
                {name:"3 ガード",key:2,},
                {name:"4 ガード",key:3,},
                {name:"5 ガード",key:4,},
                {name:"6 ガード",key:5,}
                ]
            },
            {
                列キー:4,
                カラム:[
                    {name:"1 バルコニー",key:0,},
                    {name:"2 バルコニー",key:1,},
                    {name:"3 バルコニー",key:2,},
                    {name:"4 バルコニー",key:3,},
                    {name:"5 バルコニー",key:4,},
                    {name:"6 バルコニー",key:5,}
                    ] 
            }
        ]
    },
    方法:{
        オンチェンジ(){
            const {show} = this.data;
            this.setData({
                表示:!表示 
            })
        },
        getOptionItem(イベント){
            console.log("イベント",イベント)
            定数キー = event.currentTarget.dataset.key;
            cK = event.currentTarget.dataset.colkey; 定数。
            const {curKey、colKey、layouts} = this.data;
            this.setData({
                curKey:キー、
                列キー:cK
            })
            // チェックされたフィールドを使用して、列間の単一選択と行間の複数選択を許可します layouts[cK].column.map(cur => {
                   cur.checked = false を返します。
            })
            レイアウト[cK].column[キー].checked = true;
            this.setData({レイアウト})
        }
    }
})

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

以下もご興味があるかもしれません:
  • WeChat アプレットのラジオボタンのカスタム割り当て
  • WeChatアプレットでラジオチェックボックスのチェックとキャンセルを実装する方法
  • WeChat アプレットの単一選択ラジオボタンと複数選択チェックボックスボタンの使用例
  • WeChatアプレットは、単一選択タブ間の切り替え効果を実現します
  • ミニプログラムは単一選択と複数選択の機能を実装します
  • WeChatアプレットが単一選択機能を実装
  • WeChatアプレットはラジオを使用して単一のオプション機能を表示します[ソースコードのダウンロードあり]
  • WeChat アプレットのラジオチェックボックスコンポーネントの詳細な説明とサンプルコード

<<:  MySQL データベースにおける中国語文字化け問題の詳細な説明

>>:  仮想マシンUbuntu 16.04がインターネットに接続できない問題の解決策

推薦する

いくつかの重要なMySQL変数

MySQL 変数は数多くありますが、その中には注目に値するものもあります。ここでは、参考までに、注目...

画像のフェードインとフェードアウト効果を実現する js

この記事では、画像のフェードインとフェードアウトを実現するためのjsの具体的なコードを参考までに紹介...

vue-element-admin グローバル読み込み待機中

最近の要件:グローバルロード、すべてのインターフェースはロード待機機能を表示するかどうかを手動で制御...

Vueは左上と右上のスライドナビゲーションを実装します

ナビゲーションなどは日々の開発でよく使うので、記録として記事を書きます。ナビゲーションは終了/開始位...

JavaScript サンドボックスの探索

目次1. シナリオ2. サンドボックスの基本機能3. iframeの実装4. Webワーカーの実装5...

ネイティブ JavaScript でショッピングカートを実装する

この記事では、ショッピングカートを実装するためのJavaScriptの具体的なコードを参考までに紹介...

Vueページの画像が表示されない問題の解決方法

新しいバージョンの設定インターフェースを作る際に、vueフレームワークを使用して実装しました。ページ...

MySQLシリーズ15 MySQL共通設定とパフォーマンスストレステスト

1. 一般的なMySQLの設定以下のすべての構成パラメータは、32G のメモリを搭載したサーバーに基...

Vue 要素と Nuxt の使用に関するヒントを共有する

1. 要素時間選択提出フォーマット変換例えば 2018年9月7日金曜日 00:00:00 GMT+0...

Vue要素と多言語切り替えの詳細な説明

目次序文複数の言語を切り替えるにはどうすればいいですか? 1. vue-i18nパッケージをインスト...

Centos7.4 環境に lamp-php7.0 をインストールするチュートリアル

この記事では、Centos7.4 環境に lamp-php7.0 をインストールする方法について説明...

Ajax リクエストにおけるクロスドメイン問題の原因と解決策

目次1. クロスドメインはどのように形成されるのでしょうか? 2. クロスドメインの根本的な原因3....

Vue.js アプリケーションのパフォーマンス最適化分析 + ソリューション

目次1. はじめに2. Vue JS のパフォーマンス最適化が必要な理由は何ですか? 3. Vueの...

MySQL の where と on の違いと、いつ使用するか

以前、テーブル結合クエリを書いていたとき、whereとonの違いがわからず、SQLに小さな問題が発生...

Vueにおける仮想DOMの理解のまとめ

これは本質的に、ビュー インターフェース構造を記述するために使用される共通の js オブジェクトです...