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

vue3 二次封装uni-ui中的组件,并且组件中有 v-model 的解决方法

在使用uniapp+vue3开发中, 使用了uni-ui的组件,但是我们也需要自定义组件,比如我要自定一个picker 的组件, 是在 uni-data-picker 组件的基础上进行封装的
父组件中的代码

<classesselect :selectclass="selectclass" :classinfotree="classinfotree"></classesselect>
<script setup>
import classesselect from "./components/classesselect.vue"

//班级选项数据
const classinfotree = ref([{
	text:"摩尔英语1班",
	value:1
},{
	text:"摩尔英语2班",
	value:2
},{
	text:"摩尔英语3班",
	value:3
}]);

//父组件中记录选中的数据	
const selectclass = ref(3)

</script>

如下图:子组件的名称是 classesselect ,代码如下

<template>
	<view class="comwrapper">
		<view class="typesel">
			<view class="underline">
				<uni-data-picker 
					:clear-icon="false" 
					:localdata="classinfotree"    //这里接收你组件传来的 选项数据
					v-model="classselect"	//这里是选中的数据  **********这里其实就是用错误的了 错误 错误 错误*********
				></uni-data-picker>
			</view>
		</view>
	</view>
</template>
<script setup>
//班级选择器	
import { ref } from "vue"
	
const props = defineProps(["classinfotree","selectclass"])
</script>

上面的代码就已经出现错误了, 更别说运行了, 因为 子组件的v-model ,直接在子组件中改变了 父组件传来的值 ,这在vue3中是不被允许的

解决办法:我们来先看一下,官网对 v-model的解释
在这里插入图片描述
可以看到, 问题就在 @update:model-value=''newValue => searchText = newValue ",这个代码中,它就相当于在子组件中, 修改了父组件的代码

所以, 我们对 子组件的 v-model 进行还原,并且 改写 update:model-value 的方法就可以了

下面是解决之后的代码
首选, 我们把子组件中的 v-model 的代码还原

同时子组件中实现方法

function handleModelValue (val) {
    emits('update:modelValue', val)  //触发父组件中的方法, 并把新的子组件中的值传送到父组件中
}

————————————
然后是父组件中的代码
在这里插入图片描述

在这里插入图片描述
通过以上的改写, 就可以正常的封装 uniui中 带有 v-model 的组件了

相关文章:

  • 三级缓存架构
  • 2025解决软件供应链安全,开源安全的版本答案:SCA+SBOM
  • 基于DeepSeek,构建个人本地RAG知识库
  • 机电公司管理信息系统小程序+论文源码调试讲解
  • Qt 中实现自定义控件子类化
  • 行为模式---观察者模式
  • 如何理解JS的异步?
  • 搜索插入位置(js实现,LeetCode:35)
  • 微信小程序文件存储和获取的详细方案
  • ⭐LeetCode周赛 Q1. 找出最大的几近缺失整数——模拟⭐
  • 网络安全之命令
  • RabbitMq--消息可靠性
  • 【病毒分析】熊猫烧香病毒分析及其查杀修复
  • <3D建模>.max文件转换为.fbx文件
  • Linux NFS/TFTP文件系统挂载
  • okhttp源码解析
  • OkHttp3 详解及开发实例—官方原版(二)
  • 【WPF】Slider滑动方法(INotifyPropertyChanged、ValueChanged )响应速度对比分析
  • Nest.js全栈开发终极实践:TypeORM+微服务+Docker构建高可用企业级应用
  • vue3学习-3(逻辑复用)
  • 零跑汽车一季度营收破百亿元:净亏收窄至1.3亿元,毛利率14.9%创新高
  • 国家主席习近平任免驻外大使
  • 俄乌刚谈完美国便筹划与两国领导人通话,目的几何?
  • 武康大楼再开发:一栋楼火还不够,要带火街区“朋友圈”
  • 张巍任中共河南省委副书记
  • “AD365特应性皮炎疾病教育项目”启动,助力提升认知与规范诊疗