欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > Vue中父组件通过v-model向子组件传对象参数

Vue中父组件通过v-model向子组件传对象参数

2024/11/14 13:04:02 来源:https://blog.csdn.net/friend_ship/article/details/143643740  浏览:    关键词:Vue中父组件通过v-model向子组件传对象参数

描述: Vue中父组件通过v-model向子组件传递一个对象,在子组件实现一个能够对object key-value进行编辑的组件封装。

在这里插入图片描述

父组件文件

 <form-child v-model="configMap"></form-child>import formChild from '@/components/formchild.vue'
import { defineComponent, ref} from 'vue'export default defineComponent({name: 'form',components: {formChild},setup() {const configMap = ref({name: 'summer',age: '18'       })return {configMap,}}
})

子组件 formchild.vue

<template><div><div v-for="(item, index) in configEntries" :key="index" class="row"><a-row class="item"><a-col :span="8"><a-input type="text" v-model:value="item.key" @change="updateConfigMap"></a-input></a-col><a-col :span="8" :offset="1"><a-input type="text" v-model:value="item.value" @change="updateConfigMap"></a-input></a-col><a-col :offset="1"><close-circle-outlined @click="() => deleteByIndex(index)" :style="{fontSize: '16px', color: '#08c', marginTop: '7px'}"/></a-col></a-row> </div><a-button type="primary" @click="addConfig">add</a-button></div>
</template>
import { defineComponent, toRef } from "vue";
import { CloseCircleOutlined } from '@ant-design/icons-vue';export default defineComponent({name: 'formchild',components: {CloseCircleOutlined},props: {modelValue: Object},emits: ['update:modelValue'],setup(props, { emit }) {// 第一步 将父组件传递过来的对象转变为一个数组const configData = toRef({...props.modelValue});const configEntries = objToArray(configData.value);// 第二步 对每一个key、value可以编辑进行处理const updateConfigMap = () => {configData.value = arrayToObj(configEntries)emit('update:modelValue', configData.value)}// 第三步 添加/删除事件的处理const addConfig = () => {  configEntries.push({key: '',value: ''})updateConfigMap()}const deleteByIndex = (index)=> {configEntries.splice(index, 1)updateConfigMap()}const arrayToObj = (arr: any[]) => {return arr.reduce((obj, item) => {obj[item.key] = item.value;return obj;}, {})}const objToArray = (arr: any) => {return Object.entries(arr).map(([key, value]) =>({key,value}))}return {configEntries,addConfig,updateConfigMap,deleteByIndex,}}
})

父组件通过v-model传递,子组件通过props:{modelValue: Object}进行接收,通过 emit(‘update:modelValue’, configData.value)事件更新绑定的数据

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com