vue2自定义useVModel函数

父组件:

javascript 复制代码
<template>
<div>
 父组件数据名字:<input v-model="person.name">
 父组件数据年龄:<input v-model="person.age">
 <son v-model="person"></son>
</div>
</template>

<script>
import Son from './son.vue'
export default ({
    name:'test',
    components:{Son},
    data(){
        return{
            person:{
                name:'zsh',
                age:'18'
            }
        }
    }
})
</script>

子组件:

javascript 复制代码
<template>
<div>
    {{pdata}}
 子组件数据名字:<input v-model="pdata.name">
 子组件数据年龄:<input v-model="pdata.age">
</div>
</template>

<script>
export default ({
    name:'Son',
    props:{
    value: {
        type: Object,
        default: () => ({}),
        },
    },
    computed:{
        pdata: {
            get(){
                const that = this;
                return new Proxy(this.value, {
                    get(target, key, receiver) {
                         return target[key];
                    },
                    set(target, key, value){
                        console.log('子组件修改了数据')
                        that.$emit("input", { ...target, [key]: value });
                        return true;
                    },
                })
            },
            set(value) {
                console.log("修改了value", value);
                this.$emit("input", value);
            },
        },
    }
})
</script>
相关推荐
一只猫的梦7 分钟前
AI 适配器架构
前端·chrome
Jazz_z13 分钟前
通过 Java 实现 Word 转 TXT
java·c#·word
江华森18 分钟前
Python 实现高德地图找房(三):地图可视化与高德 JS API
开发语言·javascript·python
谭光志19 分钟前
AI 是怎么操作浏览器的——browser use 实现原理
前端·javascript·ai编程
SamDeepThinking22 分钟前
为什么我会主动给一个年轻程序员加薪、晋升?
java·后端·程序员
weixin_4713830323 分钟前
args,...args与Parameters<T>
开发语言·前端
用户30745969820725 分钟前
GatewayWorker 从零到一完整指南
javascript·php
铁皮饭盒29 分钟前
Bun.redis真正的强项
javascript
ikun_文33 分钟前
Java面向对象编程OOP核心知识
java
宠友信息43 分钟前
MySQL 租户数据隔离在即时通讯源码后端中的落地方式
java·数据库·spring boot·redis·websocket·mysql