实现代码及解析
使用到的组件有:
- uni-popup(弹窗组件)
- scroll-view(滑动视图组件)
- uni-list(列表组件,包含内置的列表样式)
- checkbox-group(复选框集合组件,记录多个复选框的值成一个数组)
- checkbox(搭配checkbox-group组件使用,提供复选框样式,绑定value属性可以将选中的参数传递到checkbox-group的@change事件中)
- label(不用多说,复选框必备 增加用户点击体验)
```vue
<a name="VPQtv"></a>### 实现效果点击左上角菜单按钮,调用popup组件的open方法弹出选项菜单。<br /><br />实现遮罩弹窗菜单<br /><a name="hJ5eu"></a>### 如果需要与数据库交互可以修改methods中的typeChange() 方法,在其中修改数据库的查询字段where的值,实时修改查询到的数据。<br />并通过dbCmd来调用对于数组数据的查询方法。<a name="aeZ9E"></a>#### 完整代码:```vue<template><!--与导航栏交互,点击导航栏中的按钮,触发弹窗事件open,在open中调用popup组件的弹窗方法,弹出选项列表--><uni-nav-bar leftIcon="list" fixed="true" @clickLeft="open"></uni-nav-bar><unicloud-db ref='udb' v-slot:default="{data,pagination,hasMore, loading, error, options}" @error="onqueryerror":where="where" collection="movie" :page-size="10"field="imgSrc,title,info,score,order,quote,_id"><!--各种展示数据库查询内容的代码...--><view v-for="(item,index) in data">{{item.title}}</view><!--...--><!-- 左侧弹出菜单栏 --><!-- 1.首先使用uPopup组件创建弹出菜单样式 --><uni-popup ref="popup" :safeArea="true"><view><!-- 2.利用scroll-view组件创建可以上下滑动的选项样式,注意上下滑动的scorll-view必须通过css设置高度height --><scroll-view scroll-y="true" class="scroll-Y"><!-- 3.利用uni-list组件提供列表的样式(注:这里uni-list只起到提供列表样式的作用 ) --><uni-list><!-- 4.利用checkbox-group组件创建复选框集合 选中的数据作为一个数组 并调用change事件获取将选中的值传入方法中 --><checkbox-group name="typelist" @change="typeChange"><!-- 5.利用v-for从data中读出电影类型的数组并创建同样数量的view块,通过type类设置view块中的样式 --><view v-for="(item,index) in movieType" class="type" :key="index"><!-- 6.利用checkbox组件创建复选框,并把值保定在value上,这样在触发group的change事件时会自动将value传入函数 --><label><text style="padding-right: 3px;">{{item}}</text><checkbox :value="item"/></label></view></checkbox-group></uni-list></scroll-view></view></uni-popup></unicloud-db></template><script>export default {data(){return {where: '',movieType: ['剧情','喜剧','动作','爱情','科幻','动画','悬疑','惊悚','恐怖','犯罪','同性','音乐','歌舞','传记','历史','战争','西部','奇幻','冒险','灾难','武侠','情色']}},methods: {async typeChange(e){const db = uniCloud.database();const dbCmd = db.command//利用数据库指令中的 all()方法 可以判断字段是否同时包含一个给定数组的所有元素,这个方法可以实现复选选择的功能this.where = {type: dbCmd.all(e.detail.value)}},open(){//通过组件定义的ref调用uni-popup方法,如果传入参数,type属性将失效,仅支持 ['top','left','bottom','right','center']this.$refs.popup.open('left')},},}</script><style>.scroll-Y {padding-top: 51%;height: 516px;}.type {margin: 13px;text-align: center;}</style>
实现效果:
页面上的数据根据选中的选项实时地改变。
