フロントエンド 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>