【Vue2】v-model

v-model 原理

当 v-model 使用在表单元素上时,会根据元素的不同而采用不同的处理:

  • <input type="text">文本 和 <textarea>上使用时,会默认给元素绑定名为 value prop和名为input的事件;
  • <input type="checkbox">复选框 和 <input type="radio">单选框 上使用时,会默认绑定名为 checkedprop 和名为 change 的事件;
  • <select>选择框 上使用时,则绑定名为 valueprop 和名为 change 的事件。
<!-- MyInput 组件代码 -->

<template>
  <div>
    <input type="text" :value="value" @input="$emit('input',$event.target.value)">
  </div>
</template>

<script>
export default {
  props: {
    value: String,  // 默认接收一个名为 value 的 prop
  }
}
</script>

上面代码就实现了组件的 v-model 功能,当在这个组件上使用 v-model 时:

<my-input v-model="msg"></my-input>

其实就等同于:

<my-input :value="msg" @input="msg = $event">

Vue 还提供了 model 选项,用于将属性或事件名称改为其他名称,比如上面的 MyInput 组件,我们改一下:

<template>
  <div>
    <input
      type="text"
      :value="title"
      @input="$emit('change', $event.target.value)"
    />
  </div>
</template>

<script>
export default {
  model: {
    prop: "title", // 将默认的 prop 名 value 改为 title
    event: "change", // 将默认的事件名 input 改为 change
  },
  props: {
    title: String, // 注意 template 代码中也要修改为 title
  },
};
</script>

此时使用组件:

<my-input v-model="msg"></my-input>

// 等同于
<my-input :title="msg" @change="msg = $event"></my-input>

.sync 修饰符

还是拿上面的 MyInput 说明,我们还是传入一个 title 的 prop,同时组件内部抛出 update:title 事件,代码如下:

// MyInput 组件中,修改抛出的事件名为 update:title
 <input type="text" :value="title" @input="$emit('update:title', $event.target.value)" />

此时如果使用这个组件,正常应该是这样:

<my-input :title="msg" @update:title="msg = $event"></my-input>

但此时可以使用 .sync 修饰符来简化:

<my-input :title.sync="msg"></my-input>

可以看到 .sync 和 v-model 所能达到的效果是一样的,应用场景:封装弹框类的基础组件, visible属性 true显示 false隐藏。

相关推荐

  1. Vue2v-model

    2024-03-18 00:24:01       19 阅读
  2. vue2vue3中的v-model

    2024-03-18 00:24:01       17 阅读
  3. vue指令v-model

    2024-03-18 00:24:01       15 阅读
  4. vue3-v-model原理

    2024-03-18 00:24:01       54 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-18 00:24:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-18 00:24:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-18 00:24:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-18 00:24:01       20 阅读

热门阅读

  1. Git使用

    Git使用

    2024-03-18 00:24:01      15 阅读
  2. 2024年3月职业健康安全管理体系基础考试真题

    2024-03-18 00:24:01       26 阅读
  3. 智能车摄像头灰度处理高效算法(下)

    2024-03-18 00:24:01       20 阅读
  4. ThreadLocal-案例编码实战

    2024-03-18 00:24:01       20 阅读
  5. 17个工作必备的Python自动化代码分享(上篇)

    2024-03-18 00:24:01       19 阅读
  6. clickhouse sql语句

    2024-03-18 00:24:01       17 阅读
  7. Leetcode64. 最小路径和

    2024-03-18 00:24:01       18 阅读
  8. 【MATLAB函数】三点法定位+权重

    2024-03-18 00:24:01       19 阅读
  9. 【Linux】在 Linux 上安装 Zig 编译环境

    2024-03-18 00:24:01       21 阅读