当前位置:首页 > VUE

vue实现vmodel

2026-02-10 14:52:23VUE

Vue 实现 v-model

在 Vue 中,v-model 是一个语法糖,用于在表单元素或自定义组件上实现双向数据绑定。以下是实现 v-model 的几种方式:

在表单元素上使用 v-model

v-model 可以直接用于原生表单元素(如 inputtextareaselect),它会根据元素类型自动绑定对应的属性和事件。

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

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

v-model 在表单元素上默认绑定了 value 属性和 input 事件。

在自定义组件上使用 v-model

在自定义组件中,v-model 默认绑定 value 属性和 input 事件。可以通过 model 选项修改默认行为。

vue实现vmodel

<template>
  <CustomInput v-model="message" />
  <p>输入的内容是:{{ message }}</p>
</template>

<script>
import CustomInput from './CustomInput.vue'

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

CustomInput.vue 中:

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

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

使用 model 选项修改默认绑定

如果需要修改默认的 valueinput 绑定,可以在组件中使用 model 选项:

<template>
  <CustomInput v-model="message" />
</template>

<script>
export default {
  model: {
    prop: 'checked',  // 修改绑定的属性名
    event: 'change'   // 修改绑定的事件名
  },
  props: ['checked'],
  methods: {
    handleChange(e) {
      this.$emit('change', e.target.checked)
    }
  }
}
</script>

Vue 3 中的 v-model

在 Vue 3 中,v-model 的行为有所变化。默认情况下,v-model 绑定的是 modelValue 属性和 update:modelValue 事件。

vue实现vmodel

<template>
  <CustomInput v-model="message" />
</template>

<script>
import CustomInput from './CustomInput.vue'

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

CustomInput.vue 中:

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

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

多个 v-model 绑定

Vue 3 支持在单个组件上绑定多个 v-model

<template>
  <UserForm
    v-model:name="userName"
    v-model:age="userAge"
  />
</template>

<script>
import UserForm from './UserForm.vue'

export default {
  components: { UserForm },
  data() {
    return {
      userName: '',
      userAge: 0
    }
  }
}
</script>

UserForm.vue 中:

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

<script>
export default {
  props: ['name', 'age']
}
</script>

总结

v-model 是 Vue 中实现双向数据绑定的便捷方式。在表单元素中,它自动绑定 valueinput;在自定义组件中,可以通过 props$emit 手动实现。Vue 3 对 v-model 进行了改进,支持多个绑定和自定义属性名。

标签: vuevmodel
分享给朋友:

相关文章

vue 方法实现

vue 方法实现

在 Vue 中,方法的实现通常通过 methods 选项完成。以下是 Vue 方法实现的核心要点和示例: 基本方法定义 在 Vue 组件中定义方法时,需将函数声明放在 methods 对象内。这些方…

vue实现tablegrid

vue实现tablegrid

Vue 实现 TableGrid 的方法 使用 Element UI 的 Table 组件 Element UI 提供了强大的 Table 组件,可以快速实现表格布局。安装 Element UI 后,…

vue 实现回复

vue 实现回复

Vue 实现回复功能 在 Vue 中实现回复功能通常涉及表单提交、数据绑定和列表渲染。以下是实现步骤和代码示例: 数据绑定与表单 <template> <div>…

vue实现机制

vue实现机制

Vue 实现机制的核心原理 Vue.js 的核心实现机制主要基于响应式系统、虚拟 DOM 和组件化设计。以下是关键实现细节: 响应式系统 Vue 通过 Object.defineProperty(V…

vue实现日历

vue实现日历

Vue 实现日历的基本方法 使用 Vue 实现日历可以通过自定义组件或借助第三方库完成。以下是两种常见实现方式: 自定义日历组件 创建基于 Vue 的日历组件需要处理日期计算和渲染逻辑。核心是生成当…

vue实现搜索查询

vue实现搜索查询

Vue 实现搜索查询的方法 双向绑定实现实时搜索 在Vue中可以通过v-model绑定输入框的值,结合计算属性或watch监听输入变化实现实时搜索。 <template> <i…