在微信小程序中实现多条件筛选页面,通常需要以下几个步骤:
1. **设计筛选条件的UI界面**:使用`<picker>`、`<checkbox>`、`<input>`等组件来让用户选择或输入筛选条件。
2. **管理筛选状态**:使用`data`来存储用户选择的筛选条件。
3. **处理筛选逻辑**:根据用户选择的条件,向后端请求数据或在前端过滤数据。
4. **展示筛选结果**:将筛选后的数据显示在页面上。
下面是一个简单的示例代码,展示如何实现一个多条件筛选页面。
1. `pages/filter/filter.wxml`
<view class="container"> <!-- 城市筛选 --> <view class="filter-item"> <text>城市:</text> <picker mode="multiSelector" range="{{cities}}" value="{{cityIndex}}" bindchange="onCityChange"> <view class="picker"> {{cities[cityIndex[0]]}} - {{cities[cityIndex[1]]}} </view> </picker> </view> <!-- 价格区间筛选 --> <view class="filter-item"> <text>价格:</text> <input type="number" placeholder="最低价" bindinput="onMinPriceInput" /> <input type="number" placeholder="最高价" bindinput="onMaxPriceInput" /> </view> <!-- 类型筛选 --> <view class="filter-item"> <text>类型:</text> <checkbox-group bindchange="onTypeChange"> <label wx:for="{{types}}" wx:key="id"> <checkbox value="{{item.id}}" />{{item.name}} </label> </checkbox-group> </view> <!-- 确认筛选按钮 --> <button bindtap="applyFilters">确认筛选</button> </view>
2. `pages/filter/filter.wxss`
.container { padding: 20px; } .filter-item { margin-bottom: 20px; } .picker { border: 1px solid #ccc; padding: 5px; }
3. `pages/filter/filter.js`
Page({ data: { cities: [['北京', '上海', '广州', '深圳'], ['东城区', '西城区', '朝阳区', '海淀区']], cityIndex: [0, 0], minPrice: '', maxPrice: '', types: [ { id: 1, name: '住宅' }, { id: 2, name: '商铺' }, { id: 3, name: '写字楼' } ], selectedTypes: [] }, onCityChange(e) { this.setData({ cityIndex: e.detail.value }); }, onMinPriceInput(e) { this.setData({ minPrice: e.detail.value }); }, onMaxPriceInput(e) { this.setData({ maxPrice: e.detail.value }); }, onTypeChange(e) { this.setData({ selectedTypes: e.detail.value }); }, applyFilters() { const { cityIndex, minPrice, maxPrice, selectedTypes } = this.data; const city = `${this.data.cities[0][cityIndex[0]]} - ${this.data.cities[1][cityIndex[1]]}`; console.log('筛选条件:', { city, minPrice, maxPrice, types: selectedTypes }); // 这里可以调用后端接口,传递筛选条件,获取筛选后的数据 // 例如: // wx.request({ // url: 'https://example.com/api/filter', // data: { city, minPrice, maxPrice, types: selectedTypes }, // success: res => { // this.setData({ filteredData: res.data }); // } // }); } }); ``` ### 4. `pages/filter/filter.json` ```json { "navigationBarTitleText": "多条件筛选" }
解释
1. **UI界面**:
- 使用`<picker>`组件实现城市的多选。
- 使用`<input>`组件实现价格区间的输入。
- 使用`<checkbox-group>`和`<checkbox>`组件实现类型的单选或多选。
2. **状态管理**:
- 使用`data`来存储城市索引、价格区间和选中的类型。
3. **事件处理**:
- `onCityChange`、`onMinPriceInput`、`onMaxPriceInput`、`onTypeChange`分别处理城市选择、价格输入和类型选择的事件。
- `applyFilters`方法在用户点击确认筛选按钮时调用,收集所有筛选条件并进行处理(例如调用后端接口)。
4. **样式**:
- 简单的样式让页面看起来更整洁。
你可以根据实际需求扩展和修改这个示例代码,例如增加更多的筛选条件、优化UI界面等。