vue——v-model 可以被用在自定义组件上吗?如果可以,如何使用?

433 阅读1分钟

1.v-model在自定义组件上的使用:

可以。v-model 实际上是一个语法糖,如:

<input v-model="searchText">

实际上相当于:

  v-bind:value="searchText"
  v-on:input="searchText = $event.target.value">

用在自定义组件上也是同理: <custom-input v-model="searchText">

相当于:

  v-bind:value="searchText"
  v-on:input="searchText = $event">
  </custom-input>

显然,custom-input 与父组件的交互如下:

  1. 父组件将searchText变量传入custom-input 组件,使用的 prop 名为value
  2. custom-input 组件向父组件传出名为input的事件,父组件将接收到的值赋值给searchText

所以,custom-input 组件的实现应该类似于这样:

  props: ['value'],
  template: `
    <input
      v-bind:value="value"
      v-on:input="$emit('input', $event.target.value)"
    >用
  `
})

总结:

v-model在自定义组件上的使用:

1.在子组件中,要用props属性声明父组件要向子组件传递的属性名称;

2.在子组件中,用$emit向父组件向上派发事件,事件的触发写在子组件中;

3.在子组件中,model不自定义时,v-model会默认把value用作prop,input用作事件event,使用model选项可以避免多选框、复选框按钮产生的冲突;

4.在父组件中使用自定义的子组件,用v-model将子组件中props属性中要向子组件传递的属性名称传递过去;