当前位置:首页 > 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 示例:

<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 的默认约定来实现。

vue v model 实现

标签: vuemodel
分享给朋友:

相关文章

vue实现购物按钮

vue实现购物按钮

Vue 购物按钮实现方法 基础按钮实现 使用 Vue 的模板语法创建基础按钮组件,绑定点击事件处理购物逻辑: <template> <button @click="addToC…

vue实现打字机

vue实现打字机

Vue实现打字机效果 在Vue中实现打字机效果可以通过动态更新文本内容并添加延迟来实现。以下是几种常见的实现方法: 使用setInterval实现 <template> <d…

用vue实现搜索查询

用vue实现搜索查询

实现搜索查询的基本思路 在Vue中实现搜索查询功能通常涉及以下几个核心部分:数据绑定、事件监听、过滤逻辑和UI反馈。以下是一个完整的实现方案。 数据绑定与输入框 创建一个Vue组件,包含一个输入框用…

vue实现列表显示

vue实现列表显示

Vue 实现列表显示的方法 在 Vue 中实现列表显示通常使用 v-for 指令,结合数组或对象数据渲染动态列表。以下是几种常见的实现方式。 基本列表渲染 通过 v-for 指令遍历数组,动态生成…

vue实现继承语法糖

vue实现继承语法糖

在Vue中实现继承可以通过多种方式模拟类继承的效果,以下是常见的几种方法: 使用mixins实现逻辑复用 通过Vue的mixins机制共享组件选项,达到类似继承的效果: const Bas…

vue实现文章锚点定位

vue实现文章锚点定位

实现文章锚点定位的方法 在Vue中实现文章锚点定位可以通过多种方式完成,以下是几种常见的方法: 使用原生HTML锚点 通过HTML的id属性和<a>标签的href属性实现锚点跳转。在Vu…