Vue3 自定义组件 v-model 的问题

如题,之前封装组件一直用的vue2的emit方式(组件写方法,使用的时候写自定义事件去接受)

今天尝试去用组件 v-model 的方式去封装组件,就遇到了个绑定的问题,首先使用组件

<Switch v-model="switchVal" />

//子组件内

<view class="r" :class="{active:value}" @click='change'>
        <view class="circle">
        </view>
    </view>

使用change事件去修改value的值

emit('update:modelValue', !value)

 

因为我需要的值是布尔值,所以取反,就卡在这里了。这里有严重的bug,不能这样去修改值。 

正确的方式应该是通过计算属性的set去触发父组件的值去更新,请看代码

//父组件不变

//子组件
<view class="r" :class="{active:value}" @click='change'>
		<view class="circle">
		</view>
</view>

//js部分
	const props = defineProps({
		modelValue: {
			type: Boolean,

		}
	})
	const emit = defineEmits(['update:modelValue'])
	const change = () => {
		value.value = !value.value
	}
	const value = computed({
		get() {
			return props.modelValue
		},
		set(value) {
			console.log('修改的值');
			emit('update:modelValue', value)
		}
	})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值