前几天面试的时候被问到了这个问题,不会。
今天工作的时候刚好有需求要用到,研究了一下。

首先要明白,所谓的v-model实际上是一个语法糖。

<child v-model="value"></child>

等于

<child :value="value" @input="someHandler"></child>

因此,我们需要在子组件中,使用props来接收value,以及用this.$emit来传值出去。
在子组件中的写法是这样子的:

// 这里props不推荐这种写法,只是demo使用
props: ["value"],
// 通过props拿到数据后,不要直接使用,而是要放在computed里面使用才是比较规范的写法
computed: {
    computedValue: {
        get(){
            return this.value;
        },
        set(value){
            this.$emit("input",value);
        }
    }
}

Edward
54 声望3 粉丝

宁可十年不将军,不可一日不拱卒