uniapp+vue2+uview2.0导航栏组件二次封装

样式


代码

html 复制代码
<template>
	<view class="navBar">
		<u-navbar :title="title" :titleColor="titleColor" :bgColor="bgColor" :safeAreaInsetTop="safeAreaInsetTop"
			:autoBack="true" @leftClick="leftClick" @rightClick="rightClick">
			<view class="u-nav-slot" slot="left">
				<u-icon name="arrow-left" size="19" v-if="isSubPage"></u-icon>
				<u-icon name="home" size="20" v-if="!isSubPage"></u-icon>
			</view>
		</u-navbar>
		<view style="height: 46px;" v-if="!placeholder"></view>
	</view>
</template>

<script>
	/**
	 * NavBar导航
	 * @description 二次封装u-navbar
	 * @property {Boolean}			safeAreaInsetTop		是否开启顶部安全区适配
	 * @property {Boolean}			placeholder				固定在顶部时,是否生成一个等高元素,以防止塌陷
	 * @property {Boolean}			fixed				    导航栏是否固定在顶部
	 * @property {Boolean}			border				    导航栏底部是否显示下边框
	 * @property {String}			leftIcon				左边返回图标的名称
	 * @property {String}			leftText				左边的提示文字
	 * @property {String}			rightText				右边的提示文字
	 * @property {String}			rightIcon				右边返回图标的名称,只能为uView自带的图标
	 * @property {String}			title		            导航栏标题
	 * @property {String}			bgColor				    导航栏背景设置
	 * @property {String | Number}	titleWidth			    导航栏标题的最大宽度,内容超出会以省略号隐藏,单位rpx
	 * @property {String | Number}	height				    导航栏高度(不包括状态栏高度在内,内部自动加上)单位px
	 * @property {String | Number}	leftIconSize			左侧返回图标的大小
	 * @property {String}			leftIconColor			左侧返回图标的颜色
	 * @property {Boolean}			autoBack2.0.19		    点击左侧区域(返回图标),是否自动返回上一页
	 * @property {String | Object}	titleStyle 2.0.23		标题的样式,对象或字符串形式
	 * @event {Function}			leftClick				点击左侧区域触发
	 * @event {Function}			rightClick				点击右侧区域触发
	 * @example <navBar title="首页"/></navBar>
	 */

	export default {
		name: "navBar",
		props: {
			title: {
				type: String,
				default: '娱乐'
			},
			titleColor: {
				type: String,
				default: '#000000'
			},
			bgColor: {
				type: String,
				default: '#ffffff'
			},
			safeAreaInsetTop: {
				type: Boolean,
				default: false
			},
			placeholder: {
				type: Boolean,
				default: false
			},
			fixed: {
				type: Boolean,
				default: true
			},
			border: {
				type: Boolean,
				default: false
			},
		},
		data() {
			return {
				isSubPage: false, // 新增状态
			};
		},
		methods: {
			// 点击左侧区域
			leftClick() {
				if (this.isSubPage) {
					uni.navigateBack();
				} else {
					uni.switchTab({
						url: '/pages/index/index'
					}); 
				}
				this.$emit('leftClick');
			},
			// 点击右侧区域
			rightClick() {
				this.$emit('rightClick');
			},
		},
		mounted() {
			// 检查当前页面是否为二级页面
			let pages = getCurrentPages()
			this.isSubPage = pages.length > 1;
		}
	}
</script>

<style lang="scss" scoped></style>
相关推荐
谷歌开发者13 小时前
Web 开发指向标 | Chrome 开发者工具学习资源 (六)
前端·chrome·学习
一晌小贪欢13 小时前
【Html模板】电商运营可视化大屏模板 Excel存储 + 一键导出(已上线-可预览)
前端·数据分析·html·excel·数据看板·电商大屏·大屏看板
发现你走远了13 小时前
连接模拟器网页进行h5的调试(使用Chrome远程调试(推荐)) 保姆级图文
前端·chrome
街尾杂货店&14 小时前
css - 实现三角形 div 容器,用css画一个三角形(提供示例源码)简单粗暴几行代码搞定!
前端·css
顺凡15 小时前
删一个却少俩:Antd Tag 多节点同时消失的原因
前端·javascript·面试
小白路过15 小时前
CSS transform矩阵变换全面解析
前端·css·矩阵
爬山算法15 小时前
Redis(110)Redis的发布订阅机制如何使用?
前端·redis·bootstrap
REDcker15 小时前
前端打包工具 - Rollup 打包工具笔记
前端·笔记
前端大卫15 小时前
动态监听DOM元素高度变化
前端·javascript
Cxiaomu15 小时前
React Native App 图表绘制完整实现指南
javascript·react native·react.js