当前位置: 首页 > news >正文

vue3 v-model实例之二,tab标签页的实现

<template><div><Tab v-model="activeTab" :list="tabs" /><div><p>当前激活的 Tab 索引: {{ activeTab }}</p></div></div>
</template><script setup>
import { ref } from 'vue';
import Tab from './Tab.vue';// 模拟 tab 的列表数据
const tabs = [{ label: 'Tab 1' },{ label: 'Tab 2' },{ label: 'Tab 3' },
];// 父组件中定义一个响应式变量来控制当前激活的 Tab
const activeTab = ref(0);
</script>----------------------------------------------------------
子组件<template><div class="tab-container"><!-- Tab 标题 --><div class="tabs"><divv-for="(tab, index) in list":key="index"class="tab":class="{ active: index === activeIndex }"@click="handleTabClick(index)">{{ tab.label }}</div></div><!-- Tab 内容 --><div class="tab-content"><slot :activeIndex="activeIndex" /></div></div>
</template><script setup lang='ts'>
import { ref, reactive } from 'vue'
import { defineProps, defineEmits, watch } from 'vue';// 接收父组件传入的 props
const props = defineProps({list: {type: Array,required: true,},modelValue: {type: Number,default: 0,},
});// 定义 emit 事件,通知父组件更新激活索引
const emit = defineEmits(['update:modelValue']);// 内部的激活索引值
let activeIndex = props.modelValue;// 监听父组件传入的 modelValue,确保外部同步更新
watch(() => props.modelValue, (newVal) => {activeIndex = newVal;
});// 点击 tab 时更新激活的索引
const handleTabClick = (index) => {activeIndex = index;emit('update:modelValue', activeIndex);
};
</script><style lang='scss' scoped>
.tab-container {border: 1px solid #ccc;
}.tabs {display: flex;cursor: pointer;background-color: #f0f0f0;border-bottom: 1px solid #ccc;
}.tab {padding: 10px;flex: 1;text-align: center;
}.tab.active {background-color: #007bff;color: white;
}.tab-content {padding: 20px;
}
</style>

特别注意:以上代码let activeIndex = props.modelValue;它在web中可以正常执行。但是在基于uniapp的小程序中会出现索引值正常更新但是tab的激活样式没有更新。此时我们需要做一点改变。把activeIndex变成一个响应式对象。用ref包一下

let activeIndex = ref(props.modelValue)就可以正常执行了

http://www.lryc.cn/news/505871.html

相关文章:

  • 东方通TongWeb7.0.4.9M4部署SuperMap iServer 11.2.1
  • QT绘制同心扇形
  • 2012年西部数学奥林匹克试题(几何)
  • 8位移位寄存器的verilog语言
  • 【苍穹外卖】学习心得体会-随笔
  • MySQL学习之表的增删改
  • 电脑excel词典(xllex.dll)文件丢失是或损坏是什么原因?“xllex.dll文件缺失“要怎么解决?
  • 【CSS in Depth 2 精译_084】第 14 章:CSS 蒙版、形状与剪切概述 + 14.1:CSS 滤镜
  • gorm源码解析(四):事务,预编译
  • 前端优雅(装逼)写法(updating····)
  • 黑马Java面试教程_P7_常见集合_P4_HashMap
  • 使用 CFD 加强水资源管理:全面概述
  • XXE练习
  • R语言读取hallmarks的gmt文档的不同姿势整理
  • 【Nginx-4】Nginx负载均衡策略详解
  • Python 的 Decimal的错误计算
  • 【韩顺平 Java满汉楼项目 控制台版】MySQL+JDBC+druid
  • 【HAL库】STM32CubeMX开发----STM32F407----Time定时器中断实验
  • react18+ts 封装图表及词云组件
  • 图像根据mask拼接时,边缘有色差 解决
  • 17、ConvMixer模型原理及其PyTorch逐行实现
  • Spring整合Redis基本操作步骤
  • STM32使用SFUD库驱动W25Q64
  • ArKTS基础组件
  • 如何理解TCP/IP协议?如何理解TCP/IP协议是什么?
  • 如何使用 Python 连接 SQLite 数据库?
  • 【博弈模型】古诺模型、stackelberg博弈模型、伯特兰德模型、价格领导模型
  • 单片机:实现花样灯数码管的显示(附带源码)
  • 什么是芯片电阻
  • 【C++】sophus : geometry.hpp 位姿(SE2 和 SE3)和(2D 直线\3D 平面)转换函数 (五)