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

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

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

効果:

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

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がインターネットに接続できない問題の解決策

推薦する

node.js で Web サーバーを作成する手順の詳細な説明

序文node.js でサーバーを作成するのは非常に簡単です。小さいながらも完全な Web サーバーを...

ウェブページ上の小さなスペースに大きな画像を配置する方法

出典: www.bamagazine.comウェブページのバナー、ニュースの見出しの周りのスペース、...

よくある CSS のヒントと経験談 11 選

1. 画像の下にある数ピクセルの空白を削除するにはどうすればよいですか?コードをコピーコードは次のと...

Dockerを使用してGitlabを素早くデプロイする方法

1. GitLabイメージをダウンロードする docker pull gitlab/gitlab-c...

Baidu デッドリンクファイルを作成する方法

Baidu によって定義されているデッドリンク形式には 2 種類あります。 1: XML形式のデッド...

CSS の :focus-within の楽しさについて簡単に説明します

Bステーションでパスワードを入力するときに目を覆っているこの画像を見たことがある人もいると思いますこ...

リンクされた画像をダウンロードしてアップロードするJavaScriptの実装

写真をアップロードするので、まずはダウンロード可能な画像リソースかどうかを判断する必要があります。正...

JavaScript は setTimeout を使用してカウントダウン効果を実現します

JavaScript ネイティブ コードの記述能力を高め、setTimeout() の使用を強化する...

Linuxでディレクトリを効率的に切り替える方法

Linux でディレクトリを切り替えるとなると、誰もが間違いなくcdコマンドを思い浮かべるでしょう。...

VUEウォッチリスナーの基本的な使い方の詳しい説明

目次1. 次のコードはwatchの簡単な使用法です2. 即時監視3. ハンドラメソッド4. 深い属性...

MySql の忘れたパスワードの変更方法はバージョン 5.7 以上に適しています

1. まずmysqld.exeプロセスを停止します2. cmd を開き、mysql の bin ディ...

CSS でハートを描く 3 つの方法

以下では、CSS を使用してハートの形を描く 3 つの方法を紹介します。実装プロセスは非常にシンプル...

IE6 の iframe の水平スクロール バーの解決策

状況は以下のとおりです: (PS: 赤いボックスは iframe 領域を表し、灰色の四角形は上記の ...

ネイティブjsはショッピングカートのロジックと機能を実装します

この記事の例では、ショッピングカートのロジックと機能を実装するためのjsの具体的なコードを共有してい...

SQLベースのクエリステートメント

目次1. 基本的なSELECT文1. 指定されたフィールドをクエリする3. エイリアスを設定する4....