当前位置:首页 > 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:默认实现

vue 如何实现vmodel

<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

vue 如何实现vmodel

自定义组件示例:

<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
分享给朋友:

相关文章

vue路由实现

vue路由实现

Vue 路由实现 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。以下是 Vue Router 的基本实现步骤和核心功能。 安装 Vue Router 通过…

vue实现定时

vue实现定时

Vue 实现定时功能的方法 使用 setInterval 和 clearInterval 在 Vue 中可以通过 setInterval 和 clearInterval 实现定时功能。在组件的 mou…

vue 实现fadeout

vue 实现fadeout

Vue 实现淡出效果 在 Vue 中实现淡出(fade-out)效果可以通过 CSS 过渡或动画结合 Vue 的动态渲染功能完成。以下是几种常见方法: 使用 Vue 过渡(Transition)组件…

vue实现github

vue实现github

Vue 实现 GitHub 相关功能 创建 GitHub API 请求 在 Vue 项目中,可以使用 axios 或 fetch 与 GitHub API 进行交互。需要在 GitHub 上创建个人访…

vue指令实现

vue指令实现

Vue 指令的实现方式 Vue 指令是特殊的标记,用于在 DOM 元素上应用特定的行为。可以通过全局或局部方式注册自定义指令。 全局注册指令 在 Vue 应用中通过 Vue.directive 方法…

vue实现多线程

vue实现多线程

Vue.js 本身是单线程框架,但可以通过以下方法实现类似多线程的效果或利用浏览器多线程能力: 使用 Web Worker Web Worker 是浏览器提供的多线程 API,适合处理 CPU 密集…