uniapp自定义弹窗时去掉title栏
原创
©著作权归作者所有:来自51CTO博客作者叫做长大จุ๊บ的原创作品,请联系作者获取转载授权,否则将追究法律责任
前言:最近在项目中有这么一个需求,当点击页面中某一个元素时,调起弹窗显示相应的组件并且隐藏掉title
栏,点击组件中的关闭图标时,弹窗销毁并显示相应的title
栏。找了一下发现好多都不太对,于是记录下实现过程。
目录:
- 1.pages.json
- 2.父页面
- 3.子页面
- 4.通讯
一.组件:
- uniapp:自定义标题栏uni-nav-bar
- uniapp:弹出层uni-popup
- uniapp:关闭图标
uni-icons
二.实现过程
1.pages.json
想实现自定义title栏的时候需要在,pages.json中将该页面原有的title栏目进行隐藏,代码如下:
"path": "medical/Medical", //你的文件路径
"style": {
"navigationStyle": "custom", //这行代码
"navigationBarTextStyle": "white",
"app-plus": {
"titleNView": false
}
}
2.父页面
所谓父页面也就是你需要调用弹出层的页面,代码如下:
<uni-nav-bar v-show="titleShow" dark :fixed="true" status-bar left-icon="arrowleft" backgroundColor="#3B71E8"
:border="false" color="#fff" title="确认支付" @clickLeft="back" />
....你的其他代码
<uni-popup ref="popup" type="bottom" mask-background-color="rgba(0,0,0,0.7)" @change="maskClick">
<cost></cost> ---弹出显示的内容
</uni-popup>
其主要原理就是,当点击弹出层时候触发弹出层和的打开事假,据官方文档该事件为:this.$refs.popup.open('bottom')
,其中bottom
就是需要弹出的位置。
当触发打开事件时候,那么让自定义的title栏进行隐藏,所以我们在title
栏中写入了v-show="titleShow"
来进行显示隐藏的控制。
代码示例:
data(){
return{
titleShow: true,
}
},
methods:{
//触发弹出层打开
View_Details() {
this.$refs.popup.open('bottom')
},
back() {
uni.navigateBack({
delta: 1
})
},
//进行title栏的控制
maskClick() {
if (this.titleShow) {
this.titleShow = false
} else {
this.titleShow = true
}
}
}
3.子页面
子页面用到了uniapp的页面通讯api,当点击关闭图标时,进行页面通讯,在父页面进行事件处理,子页面代码如下所示:
<template>
<view class="cost_details">
<uni-icons custom-prefix="custom-icon" type="close" size="30" @click="IconClick"></uni-icons>
</view>
</template>
<script>
export default {
data() {
return {
}
},
methods: {
IconClick() {
uni.$emit('Close', {
msg: '关闭弹窗'
})
}
}
}
</script>
<style lang="scss" scoped>
.cost_details {
width: 100%;
height: calc(100vh - 88rpx);
background-color: #fff;
border-radius: 40rpx 40rpx 0 0;
}
</style>
4.通讯
在父页面我们可以使用uni.$on()
来进行事件的监听,触发弹出层的关闭事件:
created() {
uni.$on('Close', (data) => {
console.log(data.msg)
this.$refs.popup.close()
})
},