当前位置: 首页 > news >正文

Vue2在子组件上使用v-model实现数据的双向绑定、.sync修饰符

1、v-model

先看示例:

//父组件<template><ChildComponent v-model="parentData" />
</template><script>
import ChildComponent from './ChildComponent.vue';export default {components: {ChildComponent},data() {return {parentData: '' // 初始值}}
}
</script>

如上,在父组件中,使用v-model给子组件传递一个值,实现的数据的双向绑定。实际上呢,原理是在子组件上定义了一个自定义事件@input,并且给子组件传递了一个value值。

以上代码其实等同于:

<template><ChildComponent :value="parentData" @input="handleInput" />
</template><script>
import ChildComponent from './ChildComponent.vue';export default {components: {ChildComponent},data() {return {parentData: '' // 初始值}},methods:{handleInput(val){this.parentData=val;}}
}
</script>

在子组件中,你要通过props接收父组件传过来的value的值,然后呢,当接收到的value的值发生改变的时候,通过$emit触发自定义事件‘input’,将新值传给父组件,以便父组件中改变相应的值。

如下:

export default {props: ['value'],methods: {updateValue(newVal) {this.$emit('input', newVal)}}
}

2、.sync修饰符

看示例:

<!-- 父组件 -->
<Child :title.sync="parentTitle" />

等价于

<Child :title="parentTitle" @update:title="parentTitle = $event" />

典型使用场景:

  1. 表单组件封装
    实现输入控件值与父组件数据的实时同步。
    <!-- 父组件 -->
    <CustomInput :value.sync="inputValue" /><!-- 子组件 CustomInput -->
    <input :value="value" @input="$emit('update:value', $event.target.value)">
    
  2. 多属性同步
    通过对象语法批量绑定多个 prop:
    <ChildComponent v-bind.sync="doc" />  <!-- 自动绑定 doc 对象的每个属性 -->
    

    示例:

v-model和.sync修饰符都是实现数据双向绑定的方案,他们诞生的目的都是为了简化代码的书写。

相关文章:

  • Windows软件插件-写mp3
  • 全链路压测实战指南:从理论到高可用架构的终极验证
  • 【Python】在vscode利用pyinstaller中的.spec文件把py项目打包为.exe实现非py环境下使用的操作步骤
  • 【实战教程】从零实现DeepSeek AI多专家协作系统 - Spring Boot+React打造AI专家团队协作平台
  • wps excel将表格输出pdf时所有列在一张纸上
  • 28、动画魔法圣典:Framer Motion 时空奥义全解——React 19 交互动效
  • 智能手表集成测试报告(Integration Test Report)
  • lesson02-PyTorch开发环境安装
  • 游戏行业DDoS攻击类型及防御分析
  • 详细解释api
  • MySQL 迁移至 Doris 最佳实践方案
  • std::deque和std::vector对比
  • 使用Python与正则表达式高效提取Excel中的票号数据
  • CSS 布局系统深度解析:从传统到现代的布局方案
  • 1C:ENTERPRISE 8.3 实用开发者指南-示例和标准技术(Session1-Session3)
  • Android开发-在应用之间共享数据
  • 使用 Modern CMake 构建现代 C++ 项目:target从入门到实践
  • RK3568下QT实现输入框支持虚拟键盘
  • PYTHON训练营DAY26
  • 《Navicat之外的新选择:实测支持国产数据库的SQLynx核心功能解析》
  • 350种咖啡主题图书集结上海,20家参展书店买书送咖啡
  • 北京警方:海淀发生小客车刮碰行人事故4人受伤,肇事司机已被查获
  • 美F-35险被胡塞武装击中,损失增大让行动成“烂尾仗”
  • 上海“城市文明开放麦”全城总动员,樊振东担任首位上海城市文明大使
  • “85后”贵阳市政府驻重庆办事处主任吴育材拟任新职
  • 秦洪看盘|指标股发力,A股渐有突破态势