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>
相关推荐
吃饺子不吃馅17 小时前
前端画布类型编辑器项目,历史记录技术方案调研
前端·架构·github
许___17 小时前
el-table多选模式下跨分页保留当前页选项
javascript·vue.js
拜晨17 小时前
使用motion实现小宇宙贴纸墙效果
前端·交互设计
梦想平凡18 小时前
情怀源代码工程实践(加长版 1/3):确定性内核、事件回放与最小可运行骨架
开发语言·javascript·ecmascript
拜晨18 小时前
使用motion实现小宇宙节目广场的效果
前端·交互设计
程序猿阿越18 小时前
Kafka源码(七)事务消息
java·后端·源码阅读
m0_7482480218 小时前
C++20 协程:在 AI 推理引擎中的深度应用
java·c++·人工智能·c++20
笑我归无处18 小时前
强引用、软引用、弱引用、虚引用详解
java·开发语言·jvm
02苏_18 小时前
秋招Java面
java·开发语言
爱吃甜品的糯米团子18 小时前
详解 JavaScript 内置对象与包装类型:方法、案例与实战
java·开发语言·javascript