当前位置:首页 > VUE

vue实现vmodel

2026-03-28 00:42:06VUE

Vue 实现 v-model

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

在表单元素上使用 v-model

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

vue实现vmodel

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

vue实现vmodel

<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

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

<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实现CRUD

vue实现CRUD

Vue 实现 CRUD 操作 Vue 提供了响应式数据绑定和组件化开发能力,结合后端 API 可以轻松实现 CRUD(增删改查)功能。以下是基于 Vue 3 和 Axios 的完整实现方案。 安装依…

vue实现banner

vue实现banner

Vue实现Banner轮播 使用Vue实现Banner轮播可以通过第三方库如swiper或vue-awesome-swiper,也可以手动实现基础轮播效果。以下是两种常见方法: 使用vue-…

vue框架实现CRM

vue框架实现CRM

Vue框架实现CRM系统 使用Vue框架构建CRM(客户关系管理)系统需要结合前端技术栈和后端API。以下为关键实现方法: 技术选型 核心框架:Vue 3(Composition API)…

vue router实现分页

vue router实现分页

Vue Router 实现分页的方法 在 Vue.js 中,可以通过 Vue Router 实现分页功能,通常需要结合路由参数和动态路由匹配。以下是几种常见的实现方式: 使用查询参数实现分页 在路由…

vue实现回顶部

vue实现回顶部

实现方法一:使用 window.scrollTo 在Vue组件中,可以通过调用 window.scrollTo 方法平滑滚动到页面顶部。该方法接受一个配置对象,指定滚动行为为平滑(smooth)。…

vue实现文字复制

vue实现文字复制

Vue 实现文字复制的几种方法 使用 Clipboard API 在 Vue 中可以通过调用浏览器的 Clipboard API 实现文字复制功能。该方法兼容现代浏览器,无需额外依赖。 method…