vue3实现父子组件的双向绑定
2023-12-15 13:42:21
背景
我们在做日常的业务需求时,必然会涉及到大量的父子组件之间的数据传递,这样就会涉及到使用v-model去往子组件里传数据,达到双向绑定的效果:
以下是我整理了两种实现父子组件双向绑定的方法。
方法一:通过watch监听
父组件代码如下:
<template>
<div>
{{ value }}
<Child v-model:value="value"/>
</div>
</template>
<script lang="ts" setup>
import { ref } from 'vue'
import Child from './Child.vue'
const value = ref<string>()
</script>
子组件代码:
<template>
<div>
<span>我是子组件</span>
<Input v-model:value="inputValue" @change="handleChange"/>
</div>
</template>
<script setup lang="ts">
import { watch, ref } from 'vue'
import { Input } from 'ant-design-vue'
const props = defineProps<{
value: string
}>()
const inputValue = ref<string>('')
const emit = defineEmits<{
(e: 'update:value', v: string): void
}>()
watch(() => props.value, () => {
inputValue.value = props.value
})
const handleChange = (e: any) => {
emit('update:value', e.target.value)
}
</script>
方法二:通过computed属性
父组件代码:
<template>
<div>
{{ value }}
<Child v-model:value="value"/>
</div>
</template>
<script lang="ts" setup>
import { ref } from 'vue'
import Child from './Child.vue'
const value = ref<string>()
</script>
子组件代码:
<template>
<div>
<span>我是子组件</span>
<Input v-model:value="inputValue"/>
</div>
</template>
<script setup lang="ts">
import { computed } from 'vue'
import { Input } from 'ant-design-vue'
const props = defineProps<{
value: string
}>()
const emit = defineEmits<{
(e: 'update:value', v: string): void
}>()
const inputValue = computed({
get: () => props.value,
set: (val) => {
emit('update:value', val)
}
})
</script>
题外话
本人空闲时间做了一个计算房贷的微信小程序,有需求,有兴趣的可以扫码看看
文章来源:https://blog.csdn.net/qq_16139383/article/details/135012243
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!