フロントエンドの vue uni-app は、Meituan ドロップダウン ボックス ドロップダウン フィルター コンポーネントを模倣します。

フロントエンド Web 開発では、ドロップダウン フィルター機能は非常に一般的な対話方法であり、ユーザーが目的のオプションをすばやく選択するのに役立ちます。この記事では、Vue.js と uni-app フレームワークを使用して、効率的なドロップダウン フィルタリング機能を実装する方法を紹介します。これら 2 つの強力なフロントエンド フレームワークを使用すると、応答性の高いユーザー アクションを備えたドロップダウン フィルター コンポーネントを簡単に作成できます。

1. プロジェクトの設定

まず、新しい Vue.js プロジェクトを作成し、関連コンポーネントと uni-app の API をインポートする必要があります。これにより、コードを uni-app アプリケーションに簡単に統合できるようになります。プロジェクトでは、Vuex を使用してデータの状態を管理できます

2. データの準備

テンプレートでは、フィルタリング用のデータとデフォルトの選択シーケンスを定義する必要があります。これらのデータは、v-model ディレクティブを通じて双方向にバインドできます。同時に、メソッド内で、ユーザーの選択を処理するメソッドを定義する必要があります。このメソッドは、ユーザーが新しいフィルター項目を選択したときに呼び出されます。このメソッドでは、まずユーザーが選択したデータを取得し、次に res 変数の値を更新します。最後に、uni-app の showModal メソッドを使用して、ユーザーが選択したデータを示すモーダル ボックスを表示します。添付ソースコードのダウンロードアドレス: https://ext.dcloud.net.cn/plugin?id=12421

レンダリングは次のとおりです。
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

ドロップダウンボックスの使い方

HTMLコードセクション


<template>

<view class="content">

<view style="margin-top: 16px;">

<view style="width: 100vw; height: 40px; background-color: white;">

<!-- filterData:筛选数据  defaultIndex: 默认选择序列 @onSelected:选择事件 返回选择的值-->

<chenchuang-CCDropDownFilter :filterData='filterData' :defaultIndex='defaultIndex'

@onSelected='onSelected'></chenchuang-CCDropDownFilter>

</view>

</view>

</view>

</template>

<script>

export default {
      
      

data() {
      
      

return {
      
      

filterData: [

[{
      
      

name: '全省',

value: ''

}],

[{
      
      

name: '美食',

value: ''

},

{
      
      

name: '湘菜',

value: '1'

},

{
      
      

name: '川菜',

value: '2'

},

{
      
      

name: '火锅',

value: '3'

}

],

[{
      
      

name: '排序',

value: ''

},

{
      
      

name: '好评优先',

value: '1'

},

{
      
      

name: '销量优先',

value: '2'

},

{
      
      

name: '低价优先',

value: '3'

}

],

[{
      
      

name: '筛选',

value: ''

},

{
      
      

name: '筛选1',

value: '1'

},

{
      
      

name: '筛选2',

value: '2'

}

],

],

defaultIndex: [0, 0, 0, 0]

}

},

mounted() {
      
      

let cityArr = ['广州市', '深圳市', '佛山市', '东莞市', '中山市', '珠海市', '江门市', '肇庆市', '惠州市', '汕头市', '潮州市', '揭阳市', '汕尾市',

'湛江市', '茂名市', '阳江市', '云浮市', '韶关市', '清远市', '梅州市', '河源市'

]

for (let s of cityArr) {
      
      

this.filterData[0].push({
      
      

name: s,

value: s

});

}

},

methods: {
      
      

onSelected(res) {
      
      

console.log('选择res = ' + JSON.stringify(res));

uni.showModal({
      
      

title: '下拉筛选选择数据',

content: '所选择数据 = ' + JSON.stringify(res)

})

},

}

}

</script>

<style scoped>

page {
      
      

background-color: '#F6F7FA';

}

.content {
      
      

display: flex;

flex-direction: column;

}

.mui-content-padded {
      
      

margin: 6px 14px;

}

.lineV {
      
      

margin-top: 0px;

margin-left: 15px;

width: calc(100vw - 30px);

height: 1px;

background-color: #F5F5F5;

}

.hotSearchTitV {
      
      

margin-left: 14px;

margin-top: 4px;

width: 170px;

height: 22px;

font-size: 14px;

font-family: PingFangSC-Medium, PingFang SC;

font-weight: 500;

color: #161616;

line-height: 22px;

}

.upView {
      
      

display: flex;

flex-direction: row;

height: 26px;

margin-left: 0px;

}

.cellView {
      
      

margin-top: 4px;

margin-left: 5.8px;

height: 18px;

line-height: 18px;

text-align: center;

border-radius: 2px;

padding: 0px 4px !important;

font-size: 10px;

background-color: #f5f5f5;

color: #818183;

}

.moreBtn {
      
      

height: 30px;

text-align: center;

font-size: 12px;

line-height: 30px;

color: #888888;

}

</style>

おすすめ

転載: blog.csdn.net/chenchuang0128/article/details/131847063