实现代码及解析
使用到的组件有:
- 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>
实现效果:
页面上的数据根据选中的选项实时地改变。