当前位置:首页 > VUE

vue 如何实现vmodel

2026-01-19 04:35:26VUE

Vue 中实现 v-model 的方法

v-model 是 Vue 中用于实现双向数据绑定的指令,通常用于表单元素。以下是实现 v-model 的几种方式:

在表单元素上使用 v-model

对于原生表单元素(如 inputtextareaselect),可以直接使用 v-model 绑定数据:

<template>
  <input v-model="message" placeholder="输入内容">
  <p>输入的内容是:{{ message }}</p>
</template>

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

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

在自定义组件中,可以通过 model 选项或 Vue 2.6+ 的 v-model 语法糖实现双向绑定。

vue 如何实现vmodel

方法 1:使用 model 选项(Vue 2.x)

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

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

方法 2:使用 Vue 2.6+ 的 v-model 语法糖

vue 如何实现vmodel

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

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

在 Vue 3 中使用 v-model

Vue 3 对 v-model 进行了改进,支持多个 v-model 绑定。

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

<script>
import { defineComponent } from 'vue'

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

实现多个 v-model 绑定(Vue 3)

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

<template>
  <user-form 
    v-model:name="name" 
    v-model:email="email"
  ></user-form>
</template>

<script>
import { defineComponent } from 'vue'

export default defineComponent({
  data() {
    return {
      name: '',
      email: ''
    }
  },
  components: {
    'user-form': {
      props: ['name', 'email'],
      emits: ['update:name', 'update:email'],
      template: `
        <div>
          <input 
            :value="name"
            @input="$emit('update:name', $event.target.value)"
          >
          <input 
            :value="email"
            @input="$emit('update:email', $event.target.value)"
          >
        </div>
      `
    }
  }
})
</script>

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

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

相关文章

vue设计与实现目录

vue设计与实现目录

以下是《Vue设计与实现》一书的典型目录结构(根据常见技术书籍及Vue核心内容整理): 响应式系统 响应式数据的基本原理 依赖收集与触发更新 实现简易响应式系统 Proxy与Refle…

vue实现store

vue实现store

Vue 实现 Store 在 Vue 中,可以通过 Vuex 或 Pinia 实现全局状态管理(Store)。以下是两种主流方案的实现方法。 使用 Vuex 实现 Store Vuex 是 Vue…

vue实现autocomplete

vue实现autocomplete

Vue 实现 Autocomplete 功能 Vue 中实现 Autocomplete(自动完成)功能可以通过自定义组件或使用现有库完成。以下是几种常见方法: 方法一:使用 Vue 原生实现…

vue实现类别

vue实现类别

Vue 实现类别的几种方法 在 Vue 中实现类别功能可以通过多种方式完成,以下是一些常见的方法: 使用 v-bind:class 动态绑定类名 通过对象语法或数组语法动态绑定类名,根据条件添加或移…

vue 实现筛选

vue 实现筛选

实现筛选功能的基本方法 在Vue中实现筛选功能通常涉及以下几个核心步骤: 数据绑定与筛选逻辑 使用v-model绑定筛选条件到Vue实例的数据属性,结合计算属性实现动态筛选: data() {…

vue 实现modal

vue 实现modal

Vue 实现 Modal 的方法 使用 Vue 原生组件 通过 Vue 的组件系统可以轻松实现 Modal。创建一个可复用的 Modal 组件,通过 props 控制显示与隐藏。 <templ…