当前位置:首页 > VUE

vue怎么实现双向

2026-01-19 09:59:20VUE

Vue 双向绑定的实现方式

Vue 中实现双向绑定的核心机制是 v-model 指令,它结合了属性绑定和事件监听,适用于表单元素或自定义组件。

表单元素的双向绑定

在原生表单元素(如 inputselecttextarea)上,v-model 会根据元素类型自动绑定对应的属性和事件:

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

等效于手动绑定值和事件:

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

自定义组件的双向绑定

对于自定义组件,v-model 默认绑定 value 属性和 input 事件。可以通过 model 选项修改默认行为:

vue怎么实现双向

export default {
  model: {
    prop: 'selected',  // 绑定的属性名
    event: 'change'    // 触发更新的事件名
  },
  props: ['selected'],
  methods: {
    updateValue(newVal) {
      this.$emit('change', newVal);
    }
  }
}

使用 .sync 修饰符

Vue 2.x 支持通过 .sync 修饰符实现父子组件双向绑定:

<child-component :title.sync="pageTitle"></child-component>

子组件通过触发 update:title 事件更新值:

this.$emit('update:title', newTitle);

Vue 3 的改进

Vue 3 中 v-model 支持多个双向绑定,且默认使用 modelValue 属性和 update:modelValue 事件:

vue怎么实现双向

<custom-component v-model="name"></custom-component>

子组件实现:

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

底层原理

双向绑定的实现基于响应式系统和事件机制:

  • 通过 Object.defineProperty(Vue 2)或 Proxy(Vue 3)监听数据变化
  • 数据变化时触发视图更新
  • 视图输入事件触发数据更新

对于需要深度控制的情况,可直接使用计算属性的 get/set

computed: {
  value: {
    get() { return this.internalValue; },
    set(v) { this.internalValue = v; }
  }
}

标签: 双向vue
分享给朋友:

相关文章

vue设计与实现 书

vue设计与实现 书

vue设计与实现 书 《Vue.js设计与实现》是一本深入探讨Vue.js框架内部原理和设计思想的书籍,适合希望深入理解Vue.js的开发者。以下是关于这本书的详细信息: 书籍内容 《Vue…

vue实现visual

vue实现visual

Vue 实现可视化(Visual)的常见方法 在 Vue 中实现可视化通常涉及数据可视化库的集成,以下是几种主流方案: 使用 ECharts ECharts 是一个强大的 JavaScript 图表…

vue SSG实现

vue SSG实现

Vue SSG 实现方法 Vue 的静态站点生成(SSG)可以通过多种工具和框架实现,以下是几种常见的方法: 使用 VuePress VuePress 是一个基于 Vue 的静态站点生成器,适合文档…

实现.vue文件

实现.vue文件

创建.vue文件的基本结构 一个标准的.vue文件包含三个部分:模板(template)、脚本(script)和样式(style)。这种结构允许开发者在一个文件中管理组件的HTML、JavaScrip…

vue实现frame

vue实现frame

Vue 中实现 iframe 的方法 在 Vue 中可以通过直接使用 <iframe> 标签或动态绑定 src 属性来实现 iframe 功能。 基本用法 <template&g…

vue实现popper

vue实现popper

Vue 实现 Popper 的方法 使用 Tippy.js 库 Tippy.js 是一个轻量级的 Popper.js 封装库,提供丰富的工具提示功能。安装 Tippy.js 及其 Vue 封装: n…