当前位置:首页 > VUE

vue实现数据双向

2026-02-19 18:35:22VUE

Vue 实现数据双向绑定

Vue 中实现数据双向绑定的核心机制是 v-model 指令,主要用于表单元素(如 inputtextareaselect 等)。其本质是语法糖,结合了 :value 绑定和 @input 事件监听。

基础用法

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

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

对应的 JavaScript 部分:

data() {
  return {
    message: ''
  }
}

自定义组件实现双向绑定

在自定义组件中实现类似 v-model 的功能,需遵循 Vue 的约定:

  1. 组件通过 model 选项或 v-bind:value + v-on:input 实现双向绑定。

  2. Vue 2.x 示例:

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

    组件内部:

    props: ['value'],
    methods: {
    updateValue(newValue) {
     this.$emit('input', newValue);
    }
    }

    模板部分:

    vue实现数据双向

    <input :value="value" @input="updateValue($event.target.value)" />
  3. Vue 3.x 使用 v-model 的改进:

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

    组件内部:

    props: ['modelValue'],
    emits: ['update:modelValue'],
    methods: {
    updateValue(newValue) {
     this.$emit('update:modelValue', newValue);
    }
    }

修饰符

Vue 提供 v-model 修饰符以处理特定场景:

  • .lazy:将 input 事件改为 change 事件(延迟同步)
  • .number:自动将输入转为数字类型
  • .trim:自动去除首尾空格

示例:

vue实现数据双向

<input v-model.lazy="message" />

多选框与单选组

多选框绑定数组:

<input type="checkbox" v-model="selectedItems" value="item1">
<input type="checkbox" v-model="selectedItems" value="item2">

数据部分:

data() {
  return {
    selectedItems: []
  }
}

单选按钮绑定字符串:

<input type="radio" v-model="picked" value="one">
<input type="radio" v-model="picked" value="two">

深层原理

Vue 的双向绑定基于响应式系统:

  1. 通过 Object.defineProperty(Vue 2)或 Proxy(Vue 3)劫持数据变化。
  2. 发布-订阅模式通知依赖更新。
  3. 模板编译阶段解析 v-model 为对应的绑定和事件。

对于需要手动实现的情况,可参考以下模式:

// 简易数据劫持示例
function observe(obj) {
  Object.keys(obj).forEach(key => {
    let internalValue = obj[key];
    Object.defineProperty(obj, key, {
      get() {
        return internalValue;
      },
      set(newVal) {
        internalValue = newVal;
        // 触发更新
      }
    });
  });
}

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

相关文章

vue实现双向

vue实现双向

Vue 实现双向绑定的方法 Vue 的双向绑定主要通过 v-model 指令实现,它结合了数据绑定和事件监听,适用于表单元素(如 input、select、textarea 等)。以下是几种常见的实现…

vue实现数据增加

vue实现数据增加

Vue 实现数据增加的方法 在 Vue 中实现数据增加通常涉及操作数据源(如数组或对象),并通过响应式机制更新视图。以下是几种常见的方法: 使用 v-model 绑定表单输入 通过表单输入绑定数据,…

vue实现数据累加

vue实现数据累加

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

vue实现数据换行

vue实现数据换行

使用 white-space CSS 属性 在 Vue 中,可以通过 CSS 的 white-space 属性控制文本换行。将样式设置为 white-space: pre-line 或 white-s…

vue实现提交数据

vue实现提交数据

使用表单提交数据 在Vue中可以通过v-model绑定表单数据,结合@submit事件处理提交逻辑。以下是一个基础表单提交示例: <template> <form @submi…

vue实现数据交互

vue实现数据交互

Vue 实现数据交互的方法 Vue 提供了多种方式实现数据交互,包括组件通信、状态管理、HTTP 请求等。以下是几种常见的方法: 父子组件通信 父组件通过 props 向子组件传递数据,子组件通过…