当前位置:首页 > 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 实现订单功能 数据模型设计 订单功能通常需要设计以下数据结构: // 订单数据结构 const order = { id: '', // 订单ID userId:…

vue实现安全免登录

vue实现安全免登录

Vue 实现安全免登录的方案 免登录功能通常通过持久化认证状态(如 Token)实现,但需兼顾安全性。以下是基于 Vue 的常见实现方案: 基于 Token 的免登录 登录成功后存储 Toke…

vue 实现toast

vue 实现toast

vue 实现 toast 的方法 在 Vue 中实现 Toast 提示功能可以通过多种方式,以下是几种常见的实现方法: 使用第三方库 Vue 生态中有许多成熟的 Toast 库,例如 vue-toa…

vue实现效果

vue实现效果

以下是Vue实现常见效果的几种典型方法,分为不同场景说明: 数据绑定与响应式更新 使用v-model实现表单双向绑定: <template> <input v-model…

vue实现切换

vue实现切换

Vue 实现切换功能的方法 在 Vue 中实现切换功能可以通过多种方式实现,以下是一些常见的方法: 使用 v-if 和 v-else 指令 通过条件渲染实现切换功能,适用于简单的显示/隐藏场景。…

vue实现试卷

vue实现试卷

Vue实现试卷系统的基本思路 使用Vue.js构建试卷系统需要结合组件化开发、状态管理和后端数据交互。核心功能包括题目展示、答题逻辑、计时器和提交答案。 核心功能模块划分 试卷组件结构 试卷容…