当前位置:首页 > VUE

vue v model 实现

2026-01-19 07:11:24VUE

Vue v-model 实现原理

Vue 的 v-model 是一个语法糖,用于在表单元素或组件上实现双向数据绑定。其核心是通过 value 属性和 input 事件的组合来实现数据同步。

基本实现方式: 在原生表单元素上,v-model 会根据元素类型自动绑定不同的属性和事件:

  • 对于 <input type="text"><textarea>,绑定 value 属性和 input 事件。
  • 对于 <input type="checkbox"><input type="radio">,绑定 checked 属性和 change 事件。
  • 对于 <select>,绑定 value 属性和 change 事件。

在表单元素中使用 v-model

以下是一个简单的示例,展示如何在表单元素中使用 v-model

<template>
  <div>
    <input type="text" v-model="message" />
    <p>{{ message }}</p>
  </div>
</template>

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

在自定义组件中实现 v-model

在自定义组件中,可以通过 model 选项配置 v-model 的绑定属性和事件。默认情况下,v-model 会使用 value 作为 prop 和 input 作为事件。

自定义组件的实现:

<template>
  <div>
    <custom-input v-model="message"></custom-input>
    <p>{{ message }}</p>
  </div>
</template>

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

使用 model 选项自定义 prop 和事件

如果需要自定义 v-model 绑定的 prop 和事件,可以使用 model 选项:

<template>
  <div>
    <custom-checkbox v-model="checked"></custom-checkbox>
    <p>{{ checked ? 'Checked' : 'Unchecked' }}</p>
  </div>
</template>

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

Vue 3 中的 v-model 变化

在 Vue 3 中,v-model 的实现有所调整:

  • 默认使用 modelValue 作为 prop 和 update:modelValue 作为事件。
  • 支持多个 v-model 绑定,例如 v-model:titlev-model:content

Vue 3 示例:

vue v model 实现

<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
          type="text"
          :value="modelValue"
          @input="$emit('update:modelValue', $event.target.value)"
        />
      `
    }
  }
};
</script>

总结

v-model 的核心是通过绑定指定的 prop 和事件实现双向数据同步。在原生表单元素中,Vue 会自动处理这些绑定;在自定义组件中,可以通过 model 选项或 Vue 3 的默认约定来实现。

标签: vuemodel
分享给朋友:

相关文章

vue实现表格多行修改

vue实现表格多行修改

实现多行编辑表格 在Vue中实现表格的多行编辑功能,可以通过以下方法完成。这里以Element UI的表格组件为例,但思路适用于其他UI库或原生实现。 数据准备 定义表格数据和编辑状态管理变量:…

vue实现旋转

vue实现旋转

Vue 实现旋转效果的方法 在 Vue 中实现旋转效果可以通过多种方式完成,以下是几种常见的方法: 使用 CSS 动画 通过 Vue 的 :class 或 :style 绑定 CSS 动画实现旋转效…

vue实现$.extend

vue实现$.extend

Vue 实现类似 jQuery 的 $.extend 功能 在 Vue 中实现类似 jQuery 的 $.extend 功能,可以通过多种方式完成。$.extend 主要用于合并多个对象的属性,Vue…

vue实现建模

vue实现建模

Vue 实现建模的方法 在 Vue 中实现建模通常涉及数据绑定、组件化和状态管理。以下是几种常见的方法: 数据驱动建模 Vue 的核心是数据驱动视图。通过定义数据模型,Vue 会自动更新 DOM。例…

vue 实现筛选

vue 实现筛选

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

vue实现路径

vue实现路径

Vue 实现路径的方法 在 Vue 中实现路径管理通常涉及 Vue Router 的使用,以下是一些常见的实现方法: 安装 Vue Router 通过 npm 或 yarn 安装 Vue Route…