# vue3 vant4 Tabbar 标签栏组件的封装 和Popup弹出层的封装

这篇具有很好参考价值的文章主要介绍了# vue3 vant4 Tabbar 标签栏组件的封装 和Popup弹出层的封装。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

vue3 vant4 Tabbar 标签栏组件的封装 和Popup弹出层的封装

vant4 showdialog 封装,vue.js
vant4 showdialog 封装,vue.js

需求如上,标签栏里第三个是图片,整个项目有两种场景,

  1. 标签栏正常跳转页面,
  2. 标签拦渲染别的图片时候,点击就是打开弹出层,

封装了标签栏,弹出层两部分,作为公共组件

标签栏的封装

<template>
  <div class="customTabbar">
    <van-tabbar v-model="state.active">
      <template v-for="(item, index) in state.iconList" :key="index">
        <van-tabbar-item :icon="getDisplayIcon(item)" :to="item.url" :badge= "index === 3 ? state.message : null">
          {{ item.name }}
          <template v-if="item.type === 'image'">
            <img :src="item.icon" alt="" class="navImg" @click="handleImageClick(item)" />
          </template>
        </van-tabbar-item>
      </template>
    </van-tabbar>
  </div>
</template>
  
<script setup>
import { defineProps, reactive } from 'vue';
import { Tabbar, TabbarItem } from 'vant';
import aaa from '../../../assets/aaaa.png';


const state = reactive({
  active: 0,
  iconList: [
    { name: "首页", icon: "home-o", url: "", type: "normal" },
    { name: "分析", icon: "search", url: "", type: "normal" },
    { name: "", icon: aaa, url: "",type: "image" }, // 新增的图片图标
    { name: "消息", icon: "chat-o", url: "", type: "normal" },
    { name: "我的", icon: "contact", url: "", type: "normal" }, // 保留之前的最后一个图标
  ],
  message:null,
});

const getDisplayIcon = (item) => (item.type === "image" ? "" : item.icon);

const emit = defineEmits(['show-popup-visible']);

const handleImageClick = (item) => {
  // if (!item.url) {
  // 打开弹出层的逻辑  给父组件传入自定义事件,专门用于打开弹出层
  // emit('show-popup-visible', true)
  // }
};

</script>

<style lang="less" scoped>
.customTabbar {
  .navImg {
    width: 7.3rem;
    height: 7.3rem;
    border-radius: 50%;
  }
}

:deep(.van-tabbar-item__icon) {
  font-size: 44px;
}

:deep.van-tabbar {
  height: 7.3rem;

}

:deep .van-tabbar-item__text {
  font-size: 1rem;
}

</style>

徽标样式需要调整,list现在是自己暂时再state里写的假数据

下面是再使用标签组件时候

<CustomTabbar />

或者是

<CustomTabbar @show-popup-visible = popupVisible />
@show-popup-visible = popupVisible    这里作用往下看,是打开弹出层的事件

直接引用再内容区域使用
如果不是需要打开弹出层的操作,不需要写上自定义事件,需要再加上

这里有个坑 <img :src=“item.icon” alt=“” class=“navImg” @click=“handleImageClick(item)” />
如果图片采用是变量方式渲染
如果不导入图片import aaa from ‘…/…/…/assets/aaaa.png’
引用图片时候是不会展示的,
相反直接把地址写在img上是可以正常渲染

----------------------------------------------------------------------------------------------
弹出层的封装,这里是子组件和父组件的数据可以实现双向数据绑定

<template>
  <van-popup :show="showPopupVisible" :position="position" :closeable="closeable" :close-icon-position="closeIconPosition" :style="{ height: '30%' }" :overlay=false @close="onClose">
    <template v-slot:default>
      <!-- 弹出层的内容 -->
      <slot></slot>
    </template>
  </van-popup>
</template>

<script setup>
import { ref, defineProps, defineEmits } from 'vue';
import { Popup } from 'vant';

const props = defineProps({
  showPopupVisible: {
    type: Boolean,
    default: false,
  },
});

const emit = defineEmits(['update-showPopupVisible']);

const popupVisible = ref(props.showPopupVisible);
const position = 'bottom';
const closeable = true;
const closeIconPosition = 'top-right';

const onClose = () => {
  popupVisible.value = false;
  emit('update-showPopupVisible', popupVisible.value);
};
</script>

----父组件调用弹出层时候:-----


<CustomPopup :show-popup-visible="state.showPopupVisible" @update-showPopupVisible="onPopupUpdate">
插入需要弹出的内容 
</CustomPopup>


父组件声明

const state = reactive({
  showPopupVisible: false
})
这里的
state.showPopupVisible 组件显示关闭的状态值

这里的
state.showPopupVisible 组件显示关闭的状态值文章来源地址https://www.toymoban.com/news/detail-809470.html

触发打开弹出层事件
const popupVisible = (flag) => {
  state.showPopupVisible = ! state.showPopupVisible
}

------@update-showPopupVisible 关闭弹出层时传递过来自定义事件-----
const onPopupUpdate = (value) => {
  state.showPopupVisible = value;
}

到了这里,关于# vue3 vant4 Tabbar 标签栏组件的封装 和Popup弹出层的封装的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vite + Vue3 +Vant4构建项目时,按需引入使用Toast组件,引用 showToast 时出现编译报错的解决方案

    一.问题定位 在Vite + Vue3 +Vant4构建项目时,需要使用Toast组件显示提示信息,按照官方文档使用函数调用 使用后直接报错,说是找不到对应的样式文件(如下图): 在项目中查找node-moudles文件,确实没有找到,只有一个toast文件(如下图): 在百度搜索解决方法,说是需要单

    2024年01月17日
    浏览(71)
  • vue3+vite+vant4手机端项目实录

    目录 一、项目介绍 二、项目的搭建 1.vite的安装 2.启动vite项目  3.vant4的引入与使用 3.1安装指令 npm i vant 3.2引入vant4 4.路由router的引入 4.1安装指令 4.2路由配置 5.路径别名设置 6.json-server 6.1json-server安装 6.2json-server启动项配置 6.3启动命令:npm run mock 7.axios请求数据 7.1安装axios依

    2024年02月03日
    浏览(72)
  • vue3.2+vite+vant4+sass搭建笔记

    官方下载地址:https://github.com/coreybutler/nvm-windows/releases 双击安装                    在  vite.config.js  文件中配置插件  tips:函数组件样式有异常,在main.js中引入vant样式 1、安装插件 postcss-pxtorem 是一款 PostCSS 插件,用于将 px 单位转化为 rem 单位 lib-flexible 用于设置 rem 基

    2024年02月02日
    浏览(49)
  • 基于Vant组件库二次封装组件(TS+Vue3.x环境)

    1. 今天的需求是封装一个 Navigation Bar 导航栏组件,目的是给到App几乎所有的页面复用:      2. 因为之前的项目里使用过Vant组件库,笔者第一时间想到了Vant组件库中的 NavBar 组件,和当前App的需求匹配度很高。Vant组件库的 NavBar 组件: 3. 相信你也发现了,Vant组件库默认主题

    2023年04月18日
    浏览(54)
  • react-router-domV6.21.1版本结合ant design mobile的TabBar标签栏和Popup弹出层实现移动端路由配置

    react-router-dom在V6版本之后更换了很多的API名称,在ant design mobile的TabBar配置中还是之前的旧版本,比如使用了 switch 组件等。我们在这里使用新版本的react-router-dom进行react移动端的配置 首先使用npm下载最新版的react-router-dom 然后在main.tsx文件中引入,并且使用MemoryRouter作为我们

    2024年01月25日
    浏览(59)
  • 使用vue3 + TS + Pinia + Vant4 + vite搭建商城H5项目框架

    本文主要将如何利用搭建一个初始化的商城H5项目框架。初始化阶段使用的技术栈有:vue3.2、vue-router、 TS 、 Pinia 、 Vant4、Less、vite                         node -v 检测是否有安装node.js,未安装请先去官网安装node.js         终端输入: npm init vite         自定

    2024年02月12日
    浏览(65)
  • 【Vue3+Ts project】vant4 实现触发指定表单 rules校验、setTimeout和 setInterval 区别

      一.使用 vant组件  validate属性 实现 触发指定输入框rules校验 ,满足校验通过否则失败  1. 给form表单绑定 ref并定义值名称 ,然后为你想校验的表单绑定 name值 2.为ref的值名称定义变量名 ,然后 ref值名称.value.validate(\\\'name值名称\\\'),.then接收成功 , .catch 接收失败   二. setT

    2024年02月11日
    浏览(62)
  • Taro + vue3 + js + nutUI 框架中自定义tabbar的组件封装以及页面跳转的逻辑

    1.需求:   在H5 中需要封装一个自定义的tabbar 菜单跳转 通过nut-ui 进行二次封装 2. 注意点   H5 中原生的tabbar 在ios 中会出现问题 所以进行 封装tabbar 3. 代码操作 首先全部的代码  4.解析 tabList: 菜单的内容数组  根据自己菜单的数量 来决定 const tabList = reactivemenu[]([     {    

    2024年04月17日
    浏览(53)
  • 前端Vue组件之仿京东拼多多领取优惠券弹出框popup 可用于电商商品详情领券场景使用

    随着技术的发展,开发的复杂度也越来越高,传统开发方式将一个系统做成了整块应用,经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改,造成牵一发而动全身。通过组件化开发,可以有效实现单独开发,单独维护,而且他们之间可以随

    2024年02月16日
    浏览(55)
  • uniapp组件库Popup 弹出层 的使用方法

    目录 #平台差异说明 #基本使用 #设置弹出层的方向 #设置弹出层的圆角 #控制弹窗的宽度 | 高度 #内容局部滚动 #API #Props #Event 弹出层容器,用于展示弹窗、信息提示等内容,支持上、下、左、右和中部弹出。组件只提供容器,内部内容由用户自定义 #平台差异说明 App H5 微信小

    2024年01月21日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包