当前位置:首页 > VUE

vue双向实现数据

2026-01-14 22:59:45VUE

Vue 双向数据绑定的实现

Vue 的双向数据绑定主要通过 v-model 指令实现,它结合了 v-bindv-on 的功能,能够同步表单输入和应用状态。

基本语法

在表单元素上使用 v-model,绑定一个响应式数据:

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

实现原理

  1. 数据劫持
    Vue 使用 Object.defineProperty 或 ES6 的 Proxy 拦截数据的读写操作,在数据变化时触发视图更新。

  2. 发布-订阅模式
    每个组件实例对应一个 Watcher,当依赖的数据变化时,通知视图重新渲染。

  3. 指令解析
    v-model 在编译阶段会被解析为 value 绑定和 input 事件监听的组合:

    <input 
      :value="message" 
      @input="message = $event.target.value" 
    />

自定义组件实现

在自定义组件中实现 v-model 需要显式定义 model 选项:

export default {
  model: {
    prop: 'value',  // 绑定的属性名
    event: 'input'  // 触发的事件名
  },
  props: ['value']
}

使用时与原生元素一致:

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

修饰符

  1. .lazy
    input 事件改为 change 事件,延迟同步:

    <input v-model.lazy="msg" />
  2. .number
    自动将输入转为数字类型:

    <input v-model.number="age" type="number" />
  3. .trim
    自动过滤首尾空格:

    vue双向实现数据

    <input v-model.trim="text" />

注意事项

  • 对于单选按钮、复选框等表单控件,v-model 会绑定到不同的 DOM 属性(如 checked)。
  • 在 Vue 3 中,v-model 的默认事件名从 input 改为 update,可通过参数指定:
    <custom-component v-model:title="pageTitle" />

通过上述机制,Vue 实现了高效的双向数据绑定,简化了表单处理逻辑。

标签: 双向数据
分享给朋友:

相关文章

vue实现数据展示

vue实现数据展示

Vue 数据展示的实现方法 在 Vue 中展示数据通常通过数据绑定、指令和组件等方式实现。以下是几种常见的实现方式: 数据绑定与插值表达式 使用双大括号语法 {{ }} 可以直接在模板中展示数据:…

php实现双向队列

php实现双向队列

PHP 实现双向队列的方法 双向队列(Deque,Double-ended Queue)是一种允许在队列两端进行插入和删除操作的数据结构。PHP 中可以通过数组或 SplDoublyLinkedLis…

vue实现数据累加

vue实现数据累加

实现数据累加的基本方法 在Vue中实现数据累加可以通过多种方式完成,常见的有直接操作数据、使用计算属性或结合方法调用。以下是几种典型实现方式: 直接操作数据 在模板或方法中直接对响应式数据进行累加操…

vue实现数据滚动

vue实现数据滚动

Vue 实现数据滚动的方法 使用 CSS 动画实现滚动 通过 CSS 的 animation 和 @keyframes 实现滚动效果。适用于简单的文字或列表滚动。 <template>…

vue 实现数据添加

vue 实现数据添加

Vue 数据添加的实现方法 在 Vue 中实现数据添加通常涉及表单绑定、事件处理和状态管理。以下是几种常见场景的实现方式: 表单绑定与提交 通过 v-model 实现表单数据双向绑定,使用 @sub…

vue实现数据监听

vue实现数据监听

Vue 数据监听实现方式 Vue 提供了多种方式实现数据监听,核心机制基于响应式系统。以下是常见方法: 响应式属性(data 和 computed) 在组件选项中定义 data 返回对象,Vue 会…