当前位置:首页 > VUE

vue 如何实现vmodel

2026-02-19 20:56:12VUE

Vue 中实现 v-model 的方法

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

在表单元素上使用 v-model

对于原生表单元素(如 inputtextareaselect),v-model 会自动绑定 value 属性并监听 input 事件。

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

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

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

在自定义组件中,v-model 默认会绑定 value 属性和监听 input 事件。可以通过 model 选项或 Vue 2.2+ 的 v-bindv-on 语法自定义。

方法 1:默认实现

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

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

方法 2:自定义 prop 和事件 如果需要使用非默认的 valueinput,可以通过 model 选项配置:

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

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

Vue 3 中的 v-model 实现

在 Vue 3 中,v-model 的实现有所变化,支持多个 v-model 绑定,并默认使用 modelValueupdate:modelValue

自定义组件示例:

<template>
  <custom-input v-model="message"></custom-input>
</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 绑定:

<template>
  <custom-input
    v-model:first="first"
    v-model:second="second"
  ></custom-input>
</template>

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

使用计算属性实现高级绑定

如果需要更复杂的逻辑,可以通过计算属性实现:

<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>

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

vue 如何实现vmodel

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

相关文章

vue设计与实现下载

vue设计与实现下载

vue设计与实现电子书下载 《Vue.js设计与实现》是一本深入解析Vue.js框架原理的书籍,由霍春阳(HcySunYang)撰写。以下是获取该资源的常见途径: 正版购买渠道 京东、…

vue实现tag

vue实现tag

Vue 实现标签(Tag)功能 在 Vue 中实现标签(Tag)功能可以通过多种方式完成,以下是一些常见的方法和实现步骤: 使用动态组件和 v-for 通过 v-for 指令动态渲染标签列表,结合…

vue实现素材

vue实现素材

Vue 实现素材的方法 使用 Vue 组件管理素材 在 Vue 项目中,可以通过组件化的方式管理素材。创建一个专门的组件来加载和显示素材,例如图片、视频或音频文件。组件可以接收素材的路径或 URL 作…

vue实现全屏

vue实现全屏

Vue 实现全屏功能的方法 在 Vue 中实现全屏功能可以通过浏览器提供的 Fullscreen API 来实现。以下是几种常见的实现方式: 使用原生 Fullscreen API 通过调用 doc…

vue实现表白

vue实现表白

Vue 实现表白页面 使用 Vue 可以快速创建一个动态、交互式的表白页面。以下是一个简单的实现方案: 基础结构 创建一个 Vue 项目或单文件组件,包含以下核心部分: <template&…

vue实现浮标

vue实现浮标

Vue 实现浮动按钮(浮标) 使用 Vue 实现浮动按钮可以通过多种方式完成,以下是几种常见的方法: 使用 CSS 定位和 Vue 组件 创建 Vue 组件并配合 CSS 固定定位实现浮动按钮:…