当前位置:首页 > 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 中实现单选功能可以通过多种方式完成,以下是几种常见的方法: 使用 v-model 绑定单选按钮 通过 v-model 绑定一个变量,可以实现单选功能。单选按钮的 v…

vue实现组件循环

vue实现组件循环

Vue 组件循环的实现方法 在 Vue 中实现组件循环通常使用 v-for 指令,可以循环渲染数组或对象的数据到组件上。 基本数组循环 通过 v-for 指令遍历数组,渲染多个相同结构的组件。…

vue实现横向导航

vue实现横向导航

vue实现横向导航的方法 使用Flex布局实现横向导航 在Vue中可以通过Flex布局快速实现横向导航。创建一个组件,使用display: flex和flex-direction: row属性使导航项…

vue查看更多怎么实现

vue查看更多怎么实现

实现 Vue 的“查看更多”功能 数据截取与显示控制 通过 v-if 或 v-show 控制内容的显示与隐藏。初始状态下只显示部分内容,点击“查看更多”后展开完整内容。 <template&g…

vue实现点击页面切换

vue实现点击页面切换

实现点击页面切换功能 在Vue中实现点击页面切换功能,可以通过路由跳转或组件动态渲染两种方式完成。以下是具体实现方法: 使用Vue Router实现页面跳转 安装Vue Router后,在项目中配置…

vue实现文字播放栏

vue实现文字播放栏

Vue 实现文字播放栏(跑马灯效果) 方法一:使用 CSS 动画 + Vue 数据绑定 通过 CSS 的 @keyframes 实现动画效果,结合 Vue 的动态数据绑定控制内容。 <tem…