app.json中添加git
"pages": [ "pages/filter/index" ],
filter/index.wxmlgithub
<view class="container"> <view class="list"> <view class="search-cat" wx:for="{{searchList}}" wx:for-item="p" wx:for-index="pIndex" wx:key=""> <view class="search-title">{{p.screenKey}}</view> <view class="search-items"> <view bindtap="onChange" wx:for="{{p.screenValue}}" wx:for-item="g" data-parent-index="{{ pIndex }}" data-index="{{ index }}" data-item="{{ p }}" class="item {{ g.checked ? 'active' : '' }}" wx:key="" > {{g.value}} </view> </view> </view> </view> <view class="search-bottom"> <view class="cancel" bindtap="doCancel">取消</view> <view class="confirm" bindtap="doSubmit">确认</view> </view> </view>
filter/index.wxssjson
.container { padding: 0 0 15px 15px; background: #fff; min-height: 100vh; } .search-title { padding: 19px 0; font-size: 16px; font-weight: 600; } .search-items { display: flex; justify-content: flex-start; flex-wrap: wrap; } .search-items .item { min-width: 60px; box-sizing: border-box; padding: 0 15px; height: 25px; line-height: 25px; text-align: center; font-weight: 500; border-radius: 3px; margin: 0 20px 15px 0; font-size: 14px; background: #f3f3f6; } .search-items .item.active { background: #ff5000; color: #fff; } .search-bottom { position: fixed; bottom: 0; left: 0; height: 50px; line-height: 50px; width: 100%; display: flex; justify-content: center; width: 100%; font-weight: 600; font-size: 17px; text-align: center; } .search-bottom .cancel { background: #ececf0; color: #8D8D96; flex: 1; } .search-bottom .confirm { background: #FF5000; color: #fff; flex: 1; }
filter/index.js数组
const App = getApp() Page({ data: { specialId: '', query: ['篮球鞋','36'], searchList: [ { type: 'radio', screenKey: '时尚', screenValue: ['篮球鞋', '运动鞋', '板鞋', '跑步鞋'] }, { type: 'radio', screenKey: '品牌', screenValue: ['阿迪达斯', '耐克', '皮尔卡丹'] }, { type: 'checkbox', screenKey: '尺码', screenValue: [ '36', '36.5', '37', '37.5', '38', '38.5', '39', '39.5', '40', '40.5', '41', '41.5', '42', '42.5', '43', '43.5' ] } ] // 搜索关键词 }, onLoad: function(options) { console.log(options) // 上个页面传递搜索关键词数组,目前在data里query设置 // this.data.query = options.query // 搜索关键词 this.getSearchItems() }, // 获取搜索选项 getSearchItems() { const _this = this // 异步请求数据后处理,这里直接拿假数据 const searchItems = this.data.searchList.map(n => { return Object.assign({}, n, { screenValue: n.screenValue.map(m => Object.assign( {}, { checked: _this.data.query.includes(m), // 回显query里有返回true value: m } ) ) }) }) this.setData({ searchList: searchItems }) }, // 点击筛选项 onChange(e) { const { parentIndex, item, index } = e.currentTarget.dataset // 若是选中状态 if (item.screenValue[index].checked) { item.screenValue[index].checked = false // 取消选择 } else { // 若是不是多选 if (item.type != 'checkbox') { // 所有重置为未选择状态 item.screenValue.map(n => (n.checked = false)) } // 将点击的设置为选中 item.screenValue[index].checked = true } this.setData({ [`searchList[${parentIndex}]`]: item }) }, // 取消,清空数据返回上一个页面 doCancel() { // var pages = getCurrentPages() // 获取页面栈 // var prevPage = pages[pages.length - 2] // 前一个页面 // prevPage.setData({ // query: [], // 重置 // isBack: true // }) // // 返回登陆以前的页面 // wx.navigateBack({ // delta: 1 // }) }, // 提交,携带数据返回上一个页面 doSubmit() { let selected = [] // 获取全部选中 this.data.searchList.map(n => { n.screenValue.map(m => { if (m.checked == true) { selected.push(m.value) } }) }) console.log(selected) // var pages = getCurrentPages() // 获取页面栈 // var prevPage = pages[pages.length - 2] // 前一个页面 // // 携带数据,返回登陆以前的页面 // prevPage.setData({ // query: selected, // isBack: true // }) // wx.navigateBack({ // delta: 1 // }) } })
领导要求写在新的页面,就没有在页面写组件,后续若是再改写成组件,实现的过程相对简单,有什么问题能够留言交流
完整代码连接githubapp