Vue在组件上使用 v-model 学习笔记

1,了解input绑定的v-model实质

v-model为表单元素输入的双向绑定,在input中

<input v-model="searchText">

等价于

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

解释:

  1. 将输入框的值绑定到searchText变量上,这个是单向绑定,意味着改变searchText变量的值可以改变input的value,但是改变value不能改变searchText
  2. 监听input事件(input输入框都有该事件,当输入内容时自动触发该事件),当输入框输入内容就单向改变searchText的值

这样就实现了双向绑定。

2,在组件上时使用v-model

当用在组件上时,v-model 同样可以理解为:

<custom-input v-model="searchText"></custom-input>

等价于

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

为了让它正常工作,这个子组件内的 <input> 必须:

  1. 将其 value 特性绑定到一个名叫 valueprop
  2. 在其 input 事件被触发时,将新的值通过自定义的 input 事件抛出

写成代码之后是这样的:

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

现在 v-model 就应该可以在这个组件上完美地工作起来了:

<custom-input v-model="searchText"></custom-input>

相关参考文章和出处
《Vue之自定义组件的v-model》
《vue 自定义组件使用v-model》

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。