vue3.0 + ts + vite 创建的ui-app项目,自定义标题

8 篇文章 3 订阅
8 篇文章 0 订阅

使用 vue3.0 + ts + vite 创建的ui-app项目,开发小程序,自定义封装一个标题组件

html 部分

<template>
    <view>
        <view :style="{height: data.statusBarHeight + 'px', lineHeight: data.statusBarHeight + 'px', backgroundColor: backgroundColor}"></view>
        <view :style="{height: data.navHeight + 'px', lineHeight: data.navHeight + 10 + 'px', backgroundColor: backgroundColor,
            color: color, textAlign: 'center', display: 'flex', justifyContent: 'space-between', alignItems: 'center', padding: '0 20rpx'}"
        >
            <view class="home" @click="navLeftClick">
                <van-icon v-if="leftIcon" :name="leftIcon" size="36rpx" />
                <slot name="leftIcon"></slot>
            </view>
            <view style="font-size: 14px;" @click="navTitleClick">
                <text v-if="titType">{{data.title}}</text>
                <slot name="title"></slot>
            </view>
            <view style="width: 58rpx;" @click="navRightClick">
                <van-icon v-if="rightIcon" :name="rightIcon" size="36rpx" />
                <slot name="rightIcon"></slot>
            </view>
        </view>
    </view>
</template>

script 部分

<script setup lang="ts">
import { reactive } from "vue";
// 接收父组件参数
const props = defineProps({
    // 左侧图标
    leftIcon: {
        type: String || null,
        default: null
    },
    // 是否显示标题
    titType: {
        type: Boolean,
        default: true
    },
    // 中间标题
    title: {
        type: String || null,
        default: null
    },
    // 右侧图标
    rightIcon: {
        type: String || null,
        default: null
    },
    // 字体颜色
    color: {
        type: String,
        default: '#000'
    },
    // 导航背景色
    backgroundColor: {
        type: String,
        default: '#FFFFFF'
    },
});

const data = reactive({
    // 标题内容
    title: <String | null> null,
    // 头部导航高度
    navHeight: 0,
    // 状态栏高度
    statusBarHeight: 0,
});

// 设置标题, __wxConfig.global.window.navigationBarTitleText 微信小程序获取项目标题
props.title ? data.title = props.title : data.title = __wxConfig.global.window.navigationBarTitleText;


// 获取当前原头部导航的高度进行赋值
let _windowInfo = wx.getWindowInfo();
let _menuInfo = wx.getMenuButtonBoundingClientRect();
data.statusBarHeight = _windowInfo.statusBarHeight;
data.navHeight = (_menuInfo.top - _windowInfo.statusBarHeight) * 2 + _menuInfo.height;


// 跳转事件注册
const emit = defineEmits(["navLeftClick", "navTitleClick", "navRightClick"]);

// 左侧图标点击事件
const navLeftClick = () => emit("navLeftClick");
// 中间标题点击事件
const navTitleClick = () => emit("navTitleClick");
// 右侧图标点击事件
const navRightClick = () => emit("navRightClick");

</script>

style 部分

<style lang="scss" scoped>
.home {
    width: 58rpx;
    height: 58rpx;
    display: flex;
    border-radius: 100%;
    align-items: center;
    justify-content: center;
}
</style>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端小袁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值