vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > vue v-model实现父子组件传值之子父组件同步更新

vue使用v-model实现父子组件传值之子父组件同步更新方式

作者:冰凉小脚

文章主要介绍了Vue2和Vue3中父子组件间通过props和emit实现双向绑定的方法,Vue2中,子组件通过props接收值,通过$emit触发change事件修改父组件数据;Vue3中方法类似,但语法略有不同

基于vue2和vue3两个版本的框架略显不同,所以我分开的来讲:

1、vue2

子组件(my-input.vue):

<template>
    <input type="text" :value="name" @input="inputChange" />
</template>

<script>
export default {
    model: {
        prop: 'name',
        event: 'change'
    },
    props: {
        name: {
            type: String,
            default: ''
        }
    },
    methods: {
        inputChange(e) {
            this.$emit('change', e.target.value)
        }
    },
}
</script>

父组件:

<template>
    <my-input v-model="name" />
</template>

<script>
import MyInput from './my-input.vue'
export default {
    data() {
        return {
            name: '张三'
        }
    },
}
</script>

子组件:

  1. 使用model的name和event来指定变量名和修改事件名;
  2. 通过props接收一个值(举例name),
  3. 通过this.$emit执行change事件进行对数据进行修改,实现数据双向绑定功能;

父组件:组件直接使用 v-model绑定变量即可

2、vue3

子组件:

<template>
    <input :value="modelValue" @input="updateValue" />
</template>

<script setup>
import { defineProps, defineEmits } from 'vue'

const props = defineProps({
    modelValue: {
        type: String,
        required: true
    }
})
const emits = defineEmits(['update:modelValue'])

const updateValue = (event) => {
    emits('update:modelValue', event.target.value)
}
</script>

父组件:

<template>
    <div>
        <my-input type="text" v-model="name" />
    </div>
</template>

<script setup>
import MyInput from './my-input.vue'
let name = ref('')
</script>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文