给自己封装的组件添加v-model(vue3)

Posted GHUIJS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了给自己封装的组件添加v-model(vue3)相关的知识,希望对你有一定的参考价值。

给自己的组件添加v-model还是非常必要,可提高组件的可用性,今天捣鼓了一下,做个记录:

父组件:

<template>
	<p>父组件</p>
	<div>父组件v-model变量:res</div>
	<my-child v-model="res"></my-child>
</template>
<script>
	import myChild from './components/child.vue'
	import  ref  from 'vue'
	export default 
		components:
			myChild
		,
		setup() 
			let res = ref('父组件变量')
			
			return
				res
			
		
	
</script>

子组件代码:

<!-- child -->
<template>
	<p>子组件</p>
	<input type="text" @input="inputRes()" v-model="data.text" placeholder="哈哈哈" />
</template>
<script>
	import  reactive,ref  from 'vue'
	export default 
		props:
			modelValue:
				type:String,
				default:''
			
		,
		setup(props,context)
			let data = reactive(
				text:'你好',
				modelRes:props.modelValue
			)
			
			function inputRes()
				data.modelRes = data.text
				context.emit('update:modelValue',  data.modelRes )
			
			
			return
				data,
				inputRes
			
		

	
</script>

 数据流向:

 当然,也不局限于表单事件:

<template>
	<p>父组件</p>
	<div>父组件v-model变量:data.resArray</div>
	<my-child v-model="data.resArray"></my-child>
</template>
<script>
	import myChild from './components/child.vue'
	import  ref,reactive  from 'vue'
	export default 
		components:
			myChild
		,
		setup() 
			const data = reactive(
				resArray:[]
			)
			
			return
				data
			
		
	
</script>
<!-- child -->
<template>
	<p>子组件</p>
	<button type="button" @click="optArr">给数组push</button>
</template>

<script>
	import  reactive,ref  from 'vue'
	export default 
		props:
			modelValue:
				type:Array
			
		,
		setup(props,context)
			let data = reactive(
				modelRes:props.modelValue
			)
			
			function optArr()
				console.log(data)
				data.modelRes.push(1)
				context.emit('update:modelValue',  data.modelRes )
			
			
			return
				data,
				optArr
			
		

	
</script>

效果展示: 

注意:

v-model绑定的变量默认由子组件的props的modelValue接收 ,写其他名字则接收不到,modelValue写错或者写其他名字都不行

以上是关于给自己封装的组件添加v-model(vue3)的主要内容,如果未能解决你的问题,请参考以下文章

vue3 封装单选框组件

Vue3.0更优雅的使用v-model

Vue3 在子组件中使用 v-model

vue3 组件响应式v-model 失效,实践踩坑,一文搞懂组件响应式原理,对初学者友好

vue3.x script setup实现v-model父子组件双向绑定

Vue3:v-model的问题,它不更新组件