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 与父组件的交互如下:
- 父组件将
searchText变量传入custom-input 组件,使用的 prop 名为value; - 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属性中要向子组件传递的属性名称传递过去;