当前位置:首页 > VUE

vue实现vmodel

2026-03-28 00:42:06VUE

Vue 实现 v-model

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

在表单元素上使用 v-model

在原生表单元素(如 inputtextareaselect)上,v-model 会自动绑定 value 属性和 input 事件:

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

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

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

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

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

<script>
export default {
  data() {
    return {
      message: ''
    }
  },
  components: {
    'custom-input': {
      props: ['value'],
      template: `
        <input
          :value="value"
          @input="$emit('input', $event.target.value)"
        />
      `
    }
  }
}
</script>

使用 Vue 3 的 v-model 语法

在 Vue 3 中,v-model 的默认行为有所变化,绑定的是 modelValue prop 和 update:modelValue 事件:

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

<script>
export default {
  data() {
    return {
      message: ''
    }
  },
  components: {
    'custom-input': {
      props: ['modelValue'],
      template: `
        <input
          :value="modelValue"
          @input="$emit('update:modelValue', $event.target.value)"
        />
      `
    }
  }
}
</script>

实现多个 v-model 绑定

在 Vue 3 中,可以为同一个组件绑定多个 v-model

<template>
  <custom-input
    v-model:first="firstName"
    v-model:last="lastName"
  />
</template>

<script>
export default {
  data() {
    return {
      firstName: '',
      lastName: ''
    }
  },
  components: {
    'custom-input': {
      props: ['first', 'last'],
      template: `
        <div>
          <input
            :value="first"
            @input="$emit('update:first', $event.target.value)"
          />
          <input
            :value="last"
            @input="$emit('update:last', $event.target.value)"
          />
        </div>
      `
    }
  }
}
</script>

使用计算属性优化 v-model

可以通过计算属性实现更复杂的逻辑:

vue实现vmodel

<template>
  <input v-model="computedMessage" />
</template>

<script>
export default {
  data() {
    return {
      message: ''
    }
  },
  computed: {
    computedMessage: {
      get() {
        return this.message
      },
      set(value) {
        this.message = value.toUpperCase()
      }
    }
  }
}
</script>

以上方法涵盖了从基础到高级的 v-model 实现方式,适用于 Vue 2 和 Vue 3 的不同场景。

标签: vuevmodel
分享给朋友:

相关文章

vue实现批量

vue实现批量

Vue 实现批量操作的方法 在 Vue 中实现批量操作通常涉及选择多个项目并执行统一处理,例如批量删除、批量更新等。以下是几种常见实现方式: 表格多选批量操作 使用 el-table 配合复选框实现…

vue 实现长按

vue 实现长按

实现长按功能的基本思路 在Vue中实现长按功能,通常需要监听元素的mousedown或touchstart事件,启动一个计时器。当用户按住元素超过设定的时间阈值时,触发长按回调函数。如果在时间阈值内触…

vue实现翻页

vue实现翻页

Vue实现翻页功能 在Vue中实现翻页功能通常需要结合分页组件和数据请求逻辑。以下是常见的实现方法: 使用Element UI分页组件 安装Element UI后,可以直接使用其分页组件: <…

mvvm实现vue

mvvm实现vue

MVVM 模式在 Vue 中的实现 MVVM(Model-View-ViewModel)是一种前端架构模式,Vue 的设计灵感来源于此。以下是 MVVM 在 Vue 中的核心实现方式: 数据绑定(M…

vue实现门户

vue实现门户

Vue 实现门户网站的关键步骤 搭建基础框架 使用 Vue CLI 或 Vite 初始化项目,安装 Vue Router 管理多页面路由。门户通常需要响应式布局,可引入 UI 库如 Element P…

vue实现监控

vue实现监控

Vue 实现监控功能的方法 在 Vue 中实现监控功能通常涉及数据变化监听、事件监听或第三方监控工具集成。以下是几种常见实现方式: 使用 Vue 的 watch 监听数据变化 通过 watch 可以…