Vue 如何实现自定义的组件双向绑定?

96 阅读1分钟

如果没有看过官方的教程或者查过资料,就把这个问题抛给你,你用现有的知识去实现一下,能不能实现呢?其实可以的。如果是我 我会这么做:

假设我自定义的组件叫message-card我需要有一个对象叫obj要传入子组件实现双向绑定的目的,我会这么写:

<message-card :value='obj' @input='setMessage' />

父组件中:

methods:{ 
setMessage(e)  {    
  this.obj = e.target.value;
  }
}

子组件中:

return data(){
   newValue: {}
},
props:{    
    value:{
        type:Object,
        default()=>{}
  },
 watch: {
    newValue(){
        this.$emit('input',this.newValue)
    }
}
}

什么意思呢?就是说,我往子组件中传入了一个数据,我又在子组件中监听这个数据把这个数据抛出来了,在父组件又把抛出来的值重新赋值给父组件的对象,这样其实就是实现了双向数据绑定,但是官方给了更简单的写法。

<message-card v-model='obj' />

这样就不用在父组件中在赋一遍值了。