v-model

今天在做项目的时候发现有一个语法糖v-model,我们尝试着用来简化我们的代码

v-model是一个指令,限制在<input>、<select>、<textarea>、components中使用,修饰符.lazy(取代 input 监听 change 事件)、.number(输入字符串转为有效的数字)、.trim(输入首尾空格过滤)。接下来我们就来分析 v-model 的实现原理。我们知道Vue的核心特性之一是双向绑定,vue的响应式原理是实现了数据->视图,接下来我们要学习 视图->数据的原理。
一个组件上的 v-model 默认会利用名为 value 的 prop 和名为 input 的事件,比如我项目中出现的这个

  <input type="text" :value="x"
                   @input="x=$event.target.value"
                   placeholder="在这里输入备注">

ts

<script lang='ts'>
  import {Component} from 'vue-property-decorator';
  import Vue from 'vue';

  @Component
  export default class Notes extends Vue {
    x = '';
    value=''
  }
</script>

可以简写成

 <label class="notes">
            <span class="name">备注</span>
            <input type="text" v-model="x"
                   placeholder="在这里输入备注">

ts

<script lang='ts'>
  import {Component} from 'vue-property-decorator';
  import Vue from 'vue';

  @Component
  export default class Notes extends Vue {
    x = '';
  }
</script>

少了巨多,这里就是利用v-model自动利用名为 valueprop 和名为 input的事件,使得当Notes触发一个$event.target.value 事件并附带一个新的值的时候,视图里的input的值会改变,而且这个x的属性将会被更新。

v-model的好处还不止于此,像单选框、复选框等类型的输入控件可能会将 value attribute 用于不同的目的。model 选项可以用来避免这样的冲突:举个简单的例子,这是vue文档的例子

Vue.component('base-checkbox', {
  model: {
    prop: 'checked',
    event: 'change'
  },
  props: {
    checked: Boolean
  },
  template: `
    <input
      type="checkbox"
      v-bind:checked="checked"
      v-on:change="$emit('change', $event.target.checked)"
    >
  `
})

现在在这个组件上使用 v-model 的时候:

<base-checkbox v-model="lovingVue"></base-checkbox>

这里的 lovingVue 的值将会传入这个名为 checked 的 prop。同时当 <base-checkbox> 触发一个 change 事件并附带一个新的值的时候,这个 lovingVue 的属性将会被更新。

注意你仍然需要在组件的 props 选项里声明 checked 这个 prop。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 目标:1、了解v-model的本质。2、了解v-model的实现原理。 我们知道Vue的核心特性之一是双向绑定,v...
    LoveBugs_King阅读 222,720评论 3 38
  • v-model是什么? v-model是vue给我们提供的一个内置指令(多用于表单组件的“双向数据绑定”),而内置...
    FTD止水阅读 8,855评论 0 0
  • 前段时间出来面试,有一个面试老师问我v-model是什么,我回答说其实是组件里props中的value的值和往父组...
    乌罗阅读 5,080评论 0 4
  • 1. v-model 的原理 我们在 vue 项目中主要使用 v-model指令在表单 、 及 元素上创...
    PingerL阅读 1,081评论 0 0
  • 在 vue 开发开发中, v-model 是一个非常常用的属性. 常规模式下,我们给定当前组件的某个 data 属...
    人话博客阅读 5,374评论 0 50

友情链接更多精彩内容