当前位置:首页 > 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 事件。

<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 事件实现:

<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如何实现vmodel

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

相关文章

vue实现选区创建

vue实现选区创建

Vue 实现选区创建的方法 在 Vue 中实现选区创建通常涉及 DOM 操作和事件处理。以下是几种常见的方法: 使用原生 DOM API 通过 window.getSelection() 和 Ra…

vue实现导航切换内容

vue实现导航切换内容

Vue实现导航切换内容的方法 在Vue中实现导航切换内容,可以通过以下方式实现: 使用动态组件 动态组件通过<component :is="currentComponent">实现内容…

vue实现主题

vue实现主题

Vue 实现主题的方法 使用 CSS 变量动态切换主题 定义全局 CSS 变量,通过修改这些变量实现主题切换。在 Vue 的根组件或全局样式中定义变量: :root { --primary-c…

vue 实现权限

vue 实现权限

Vue 实现权限控制的方法 在 Vue 项目中实现权限控制通常涉及前端路由、组件和按钮级别的权限管理。以下是几种常见的实现方式: 路由权限控制 通过路由守卫实现权限验证,过滤用户无权访问的路由:…

vue滚动实现

vue滚动实现

Vue 滚动实现方法 使用原生滚动 在 Vue 中可以通过 ref 获取 DOM 元素,调用原生滚动方法实现滚动效果。适用于简单场景。 <template> <div ref…

vue实现监听

vue实现监听

监听数据变化 在Vue中,可以通过watch选项或$watch方法监听数据的变化。watch适用于组件选项内声明式监听,$watch适用于动态监听。 // 选项式API export default…