当前位置:首页 > VUE

vue如何实现vmodel

2026-01-17 03:28:40VUE

Vue 中实现 v-model 的方法

v-model 是 Vue 中用于实现表单元素和数据双向绑定的指令。其本质是语法糖,结合了 value 属性和 input 事件的封装。以下是实现 v-model 的几种方式:

在表单元素上使用 v-model

对于原生表单元素(如 inputtextareaselect),直接使用 v-model 即可实现双向绑定:

<template>
  <input v-model="message" placeholder="请输入内容">
  <p>{{ message }}</p>
</template>

<script>
export default {
  data() {
    return {
      message: ''
    }
  }
}
</script>

在自定义组件中实现 v-model

若需在自定义组件中支持 v-model,需通过 model 选项或 Vue 2.6+ 的 v-bind.sync 或 Vue 3 的 v-model 语法实现。

Vue 2 实现方式:

  1. 默认情况下,v-model 会绑定 value 属性和监听 input 事件。
    
    <template>
    <custom-input v-model="message"></custom-input>
    </template>
export default { data() { return { message: '' } } } ``` 2. 自定义组件内部需显式处理 `value` 和 `input`: ```html export default { props: ['value'] } ```

Vue 3 实现方式: Vue 3 中 v-model 默认绑定 modelValue 属性和 update:modelValue 事件。

vue如何实现vmodel

<template>
  <custom-input v-model="message"></custom-input>
</template>

<script>
export default {
  data() {
    return {
      message: ''
    }
  }
}
</script>

自定义组件内部:

<template>
  <input
    :value="modelValue"
    @input="$emit('update:modelValue', $event.target.value)"
  >
</template>

<script>
export default {
  props: ['modelValue']
}
</script>

修改 v-model 的默认行为

在 Vue 2 中,可通过 model 选项修改绑定的属性和事件:

export default {
  model: {
    prop: 'checked',  // 将默认的 `value` 改为 `checked`
    event: 'change'   // 将默认的 `input` 改为 `change`
  },
  props: ['checked']
}

使用 .sync 修饰符(Vue 2)

.sync 是另一种双向绑定的方式,通过 update:propName 事件实现:

vue如何实现vmodel

<custom-input :title.sync="pageTitle"></custom-input>

组件内部:

this.$emit('update:title', newValue)

Vue 3 的多 v-model 绑定

Vue 3 支持多个 v-model 绑定:

<user-name
  v-model:first-name="firstName"
  v-model:last-name="lastName"
></user-name>

组件内部需分别处理对应的属性和事件:

<input
  :value="firstName"
  @input="$emit('update:firstName', $event.target.value)"
>
<input
  :value="lastName"
  @input="$emit('update:lastName', $event.target.value)"
>

总结

  • 原生表单元素直接使用 v-model
  • 自定义组件需通过 props$emit 实现双向绑定。
  • Vue 2 默认绑定 valueinput,可通过 model 选项修改。
  • Vue 3 默认绑定 modelValueupdate:modelValue,支持多 v-model
  • .sync 是 Vue 2 中替代多 v-model 的方案。

标签: 如何实现vue
分享给朋友:

相关文章

订单 vue实现

订单 vue实现

Vue 实现订单功能 数据模型设计 订单功能通常需要设计以下数据结构: // 订单数据结构 const order = { id: '', // 订单ID userId…

vue如何实现冒泡

vue如何实现冒泡

Vue 实现冒泡排序 在 Vue 中实现冒泡排序,可以通过数据绑定和响应式特性动态展示排序过程。以下是一个完整的实现示例,包含代码和详细说明。 数据准备 在 Vue 的 data 中定义一个数组作…

vue实现录播播放

vue实现录播播放

Vue 实现录播播放 使用 video.js 实现 安装 video.js 和相关的 Vue 适配器: npm install video.js @videojs-player/vue 在 Vue…

vue卖座网实现

vue卖座网实现

Vue 卖座网实现 项目结构搭建 使用 Vue CLI 快速初始化项目,安装必要依赖如 Vue Router、Vuex、Axios。 创建核心目录结构:components(通用组件)、views(页…

vue实现全局遮罩层

vue实现全局遮罩层

实现全局遮罩层的方法 在Vue中实现全局遮罩层可以通过多种方式完成,以下是几种常见的实现方法: 使用Vue组件创建遮罩层 创建一个遮罩层组件,通过全局注册或动态挂载的方式实现全局调用。以下是一个简单…

vue设计与实现 书

vue设计与实现 书

vue设计与实现 书 《Vue.js设计与实现》是一本深入探讨Vue.js框架内部原理和设计思想的书籍,适合希望深入理解Vue.js的开发者。以下是关于这本书的详细信息: 书籍内容 《Vue.js…