当前位置:首页 > VUE

vue 实现v model

2026-01-19 14:47:23VUE

Vue 实现 v-model 的方法

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

在表单元素上使用 v-model

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

<input v-model="message" placeholder="Edit me">
<p>Message is: {{ message }}</p>

对于复选框和单选按钮,v-model 会自动处理值的绑定:

<input type="checkbox" v-model="checked">
<p>Checked: {{ checked }}</p>

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

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

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

自定义组件的实现:

vue 实现v model

Vue.component('custom-input', {
  props: ['value'],
  template: `
    <input
      :value="value"
      @input="$emit('input', $event.target.value)"
    >
  `
})

使用 .sync 修饰符

Vue 2.3.0+ 支持 .sync 修饰符,可以实现父子组件的双向绑定。

<custom-input :value.sync="message"></custom-input>

组件内部通过 $emit('update:value', newValue) 更新值:

Vue.component('custom-input', {
  props: ['value'],
  template: `
    <input
      :value="value"
      @input="$emit('update:value', $event.target.value)"
    >
  `
})

Vue 3 中的 v-model

Vue 3 对 v-model 进行了改进,支持多个 v-model 绑定,并默认使用 modelValueupdate:modelValue

vue 实现v model

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

组件实现:

app.component('custom-input', {
  props: ['modelValue'],
  template: `
    <input
      :value="modelValue"
      @input="$emit('update:modelValue', $event.target.value)"
    >
  `
})

自定义 v-model 修饰符

可以自定义 v-model 的修饰符,例如 trimnumber 等。

<input v-model.trim="message">

在自定义组件中,可以通过 model 选项的 propevent 字段自定义绑定行为:

Vue.component('custom-input', {
  model: {
    prop: 'value',
    event: 'change'
  },
  props: ['value'],
  template: `
    <input
      :value="value"
      @input="$emit('change', $event.target.value)"
    >
  `
})

通过以上方法,可以灵活地在 Vue 中实现 v-model 的双向绑定功能。

标签: vuemodel
分享给朋友:

相关文章

vue实现预览

vue实现预览

Vue实现文件预览的方法 使用Vue实现文件预览功能可以通过多种方式完成,具体取决于文件类型(图片、PDF、视频等)。以下是几种常见文件类型的实现方案。 图片预览 通过<input type=…

项目基于vue实现

项目基于vue实现

基于Vue实现项目的关键方法 搭建基础环境 安装Node.js和npm/yarn,确保开发环境具备运行Vue的能力。通过Vue CLI快速初始化项目结构,选择所需配置(如Babel、Router、Vu…

vue实现文字播放栏

vue实现文字播放栏

Vue 实现文字播放栏(跑马灯效果) 方法一:使用 CSS 动画 + Vue 数据绑定 通过 CSS 的 @keyframes 实现动画效果,结合 Vue 的动态数据绑定控制内容。 <t…

vue实现全局遮罩层

vue实现全局遮罩层

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

vue实现选中单元格

vue实现选中单元格

Vue 实现选中单元格的方法 基础实现思路 在 Vue 中实现选中单元格功能,通常可以通过动态绑定 class 或 style 来实现。以下是一个基于表格的简单实现示例: <templ…

vue实现密码框的包

vue实现密码框的包

Vue 密码框实现方案 在 Vue 中实现密码框功能,可以通过原生 HTML 结合 Vue 指令或使用第三方组件库完成。以下是几种常见方案: 原生 HTML + Vue 双向绑定 <temp…