Vue2之3v-model在组件中的应用以及sync修饰符

article/2025/7/28 6:35:28

文章目录

    • v-model的原理
    • 带value属性组件间传值的普通写法
      • 解析
      • 演示
    • 根据v-model的原理 简写带有value属性组件之间的传值
      • 解析
      • 演示
    • 使用sync修饰符,自定义属性名进行组件传值
      • 解析
      • 案例

v-model的原理

v-model 原理
原理:v-model本质上是一个语法糖。例如应用在输入框上,就是 value属性input事件 的合写。
作用:提供数据的双向绑定
① 数据变,视图跟着变 :value
② 视图变,数据跟着变 @input
注意:$event 用于在模板中,获取事件的形参

<template><div id="app" ><input v-model="msg" type="text"><input :value="msg" @input="msg = $event.target.value" type="text"></div>
</template>

带value属性组件间传值的普通写法

解析

表单类组件 封装→ 实现 子组件 和 父组件数据 的双向绑定
父传子:数据 应该是父组件 props 传递 过来的,拆解 v-model 绑定数据
子传父:监听输入,子传父传值给父组件修改
在这里插入图片描述

演示

在这里插入图片描述

<template><div class="app">父组件<!-- 在标签内接收必须使用参数 $event接收 --><Son :selectId="selectId" @change="selectId = $event"></Son><!-- 定义函数接收形参随便写 --><!-- <Son :selectId="selectId" @change="changeSelectId"></Son> --></div>
</template><script>
import Son from "./components/Son.vue";
export default {data() {return {selectId: "2"}},methods: {// 定义函数接收形参随便写changeSelectId(newId) {this.selectId = newId;}},components: {Son},
}
</script><style>
</style>
<template><div>子组件<!-- 这里的button 是自己的点击事件 --><!-- <button @click="$emit('add')">+1</button>{{ count }} --><!-- 这里的select是表单输入事件 对应按钮的点击事件 --><!-- 如果要在页面的下拉菜单展示必须使用value的属性绑定指令 对应{{count}} --><!-- 这里如果在标签内写 必须使用$event --><!-- <select name="" id="" :value="selectId" @input="$emit('change', $event.target.value)"> --><!-- 如果定义函数参数随便定义 @input="事件名" --><select name="" id="" :value="selectId" @input="dian"><option value="1">北京</option><option value="2">上海</option><option value="3">广州</option><option value="4">深圳</option></select></div>
</template><script>
export default {props: ["selectId"],methods: {// 如果定义函数参数随便定义dian(e) {console.log(e.target.value);this.$emit("change", e.target.value);}}
};
</script><style>
</style>

运行结果
在这里插入图片描述

根据v-model的原理 简写带有value属性组件之间的传值

解析

父组件 v-model 简化代码,实现 子组件 和 父组件数据 双向绑定
① 子组件中:props 通过 value 接收,事件触发 input
② 父组件中:v-model 给组件直接绑数据 ( :value + @input )
在这里插入图片描述

演示

在这里插入图片描述

<template><div class="app">父组件<!-- <Son :selectId="selectId" @change="selectId = $event"></Son> --><!-- v-model的原理是 :value(属性绑定) + @input(表单输入事件) 修改代码如下--><!-- 将父传子的变量改为value, 将自定义的触发事件改为input输入事件--><!-- <Son :value="selectId" @input="selectId = $event"></Son> --><!-- 下面的代码相当于上面的代码, 这样就利用v-model原理简写了 --><Son v-model="selectId"></Son></div>
</template><script>
import Son from "./components/Son.vue";
export default {data() {return {selectId: "2"}},components: {Son},
}
</script><style>
</style>
<template><div>子组件<!-- <select :value="selectId" @input="$emit('change', $event.target.value)"> --><!-- 将父传子的变量改为value, 将自定义的触发事件改为input输入事件 --><select :value="value" @input="$emit('input', $event.target.value)"><option value="1">北京</option><option value="2">上海</option><option value="3">广州</option><option value="4">深圳</option></select></div>
</template><script>
export default {// props: ["selectId"],// 将父传子的变量改为valueprops: ["value"],};
</script><style>
</style>

运行结果
在这里插入图片描述

使用sync修饰符,自定义属性名进行组件传值

比如模态框使用value就不太合适。

解析

作用:可以实现 子组件父组件数据 的 双向绑定,简化代码

特点:prop属性名,可以 自定义,非固定为 value

场景:封装弹框类的基础组件, visible属性 true显示 false隐藏

本质:就是 :属性名@update:属性名 合写
在这里插入图片描述

案例

在这里插入图片描述

<template><div class="app">父组件<button @click="display">显示</button><!-- <Son :visible="isShow" 、@update:visible="isShow = $event" ></Son> --><!-- 上面和下面等价 --><Son :visible.sync="isShow"></Son> </div>
</template><script>
import Son from "./components/Son.vue";
export default {data() {return {isShow: false,}},methods: {display() {this.isShow = !this.isShow;}},components: {Son},
}
</script><style>
</style>
<template><!-- <div class="container" :style="{'display': visible ? 'block' : 'none'}"> --><div class="container" v-if="visible"><!-- 子组件 --><div class="form"><div class="header"><span>温馨提示</span> <!-- 这里update是定值 --><span @click="$emit('update:visible', false)">x</span></div><div class="body">确定退出吗</div><div class="footer"><button>确定</button><button>取消</button></div></div></div>
</template><script>
export default {props: {visible: Boolean},};
</script><style scoped lang="less">
.container::after{content: "";position: absolute;background-color: #e6e5e5;display: block;width: 100%;height: 100vh;top: 0;left: 0;z-index: 9;opacity: 0.5;
}
.form{position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);background-color: #d53737;width: 300px;height: 200px;z-index: 9999;.header{padding: 0 10px;height: 40px;line-height: 40px;display: flex;justify-content: space-between;span{&:nth-child(2){cursor: pointer;}}}.body{height: 124px;width: 100%;text-align: center;}.footer{display: flex;justify-content: space-around;}}</style>

运行结果
在这里插入图片描述
在这里插入图片描述


http://www.hkcw.cn/article/gbwEVTZkEo.shtml

相关文章

从0开始学vue:Element Plus详解

一、核心架构解析二、技术实现指南三、高级特性实现四、性能优化方案五、生态扩展方案六、调试与测试七、版本演进路线 Element Plus 是专为 Vue 3 设计的桌面端 UI 组件库&#xff0c;基于 Vue 3 的 Composition API 重构&#xff0c;在保持与 Element UI 兼容性的同时&#x…

Qt6使用opengl

1.使用qmloscilloscope工程 2.main函数里 bool openGLSupported QQuickWindow::graphicsApi() QSGRendererInterface::OpenGLRhi;if (!openGLSupported) { qWarning() << "OpenGL is not set as the graphics backend, so AbstractSeries.useOpenGL will not work…

【模拟电子电路-工具使用】

模拟电子电路-工具使用 ■ 1. 模拟软件■ 1. circuit JS ■ 2. 万用表■ 3. 示波器■ 4.■ 5.■ 6.■ 7. ■ 1. 模拟软件 ■ 1. circuit JS ■ 2. 万用表 ■ 3. 示波器 ■ 4. ■ 5. ■ 6. ■ 7.

高速串行接口

1.网口设计方案 上图中给出了两种网口设计方案&#xff0c;最上面是传统设计方式&#xff0c;下面是利用GT作为PHY层的设计&#xff0c;然后FPGA中设计协议层和MAC层。 2.SRIO SRIO的本地操作和远程操作 3.其他高速接口 srio rapid io aurora8b10b aurora64b66b pcie s…

JVM学习(六)--垃圾回收

目录 一、垃圾回收 1、概述 1.1、什么是垃圾&#xff08;Garbage)&#xff09;&#xff1f; 1.2、为什么需要GC? 1.3、Java中垃圾回收的重点区域是? 1.4、早期的GC 2、垃圾回收算法 2.1、垃圾判别阶段算法 1、引用计数算法 2、可达性分析算法(或根搜索算法、追踪性…

pikachu通关教程-CSRF

CSRF(get) 用bp进行抓包 选择action value值的修改 点击test in browser copy然后放在bp代理的浏览器上&#xff0c;会出现一个提交按钮&#xff0c;这时候点击之后信息就被修改了。 CSRF(post) 请求的方式不同&#xff0c;其他都是一样 CSRF Token 存在cookie 首先要先下载一…

2024年数维杯国际大学生数学建模挑战赛A题飞行器激光测速中的频率估计问题解题全过程论文及程序

2024年数维杯国际大学生数学建模挑战赛 A题 复合直升机的建模与优化控制问题 原题再现&#xff1a; &#xff08;一&#xff09; 问题的背景   空速&#xff0c;即飞机相对于空气的速度&#xff0c;是飞行期间需要监控的关键参数。空速与飞行状态密切相关&#xff0c;如迎角…

【Hot 100】763. 划分字母区间

目录 引言划分字母区间我的解题一、记录每个字母的最远出现位置二、扫描字符串并进行贪心划分 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;算法专栏&#x1f4a5; 标题&#xff1a;【Hot 100】763. 划分字母区间❣️ 寄语&#xff1a;书到用时…

【Unity博客节选】Playable Graph Monitor 安装使用

注&#xff1a;软件版本Unity 6.0 Timeline 1.8.7 作者&#xff1a;CSDN RingleaderWang 原文&#xff1a;《Unity第25期——Timeline结构及其源码浅析》 文章首发Github&#x1f44d;&#xff1a;《Timeline结构及其源码浅析》 Bilibili 视频版&#x1f44d;&#x1f44d;&a…

<5>, Qt系统相关

目录 一、Qt 事件 1&#xff0c;事件的定义 2&#xff0c;事件的处理 3&#xff0c;鼠标事件 4&#xff0c;按键事件 5&#xff0c;定时器 6&#xff0c;事件分发器 7&#xff0c;事件过滤器 二、Qt 文件 1&#xff0c;输入输出类 2&#xff0c;文件读写类 3&#x…

PCB设计教程【强化篇】——USB拓展坞DRC导出生产文件

前言 本教程基于B站Expert电子实验室的PCB设计教学的整理&#xff0c;为个人学习记录&#xff0c;旨在帮助PCB设计新手入门。所有内容仅作学习交流使用&#xff0c;无任何商业目的。若涉及侵权&#xff0c;请随时联系&#xff0c;将会立即处理 目录 前言 丝印调整 DRC 检查…

第十一讲 | 多态

多态 一、多态的概念二、多态的定义及实现1、动态多态的构成条件&#xff08;1&#xff09;、实现多态还有两个必须重要条件&#xff08;2&#xff09;、虚函数&#xff08;3&#xff09;、虚函数的重写/覆盖&#xff08;4&#xff09;、多态场景的一个选择题&#xff08;5&…

火语言UI组件--文件对话框

【组件功能】&#xff1a;选择单个或多个文件的对话框。 样式预览 设置 基础设置 属性名称属性释义输入值类型标题(title)对话框的标题字符串类型默认路径(defaultPath)对话框的默认展示路径字符串类型多选(multiSelections)是否允许多选布尔型(true / false)显示隐藏文件(s…

rl_sar功能包详解

文章目录 1. 功能包概述2. 目录结构详解2.1 核心目录结构2.2 各目录功能src/ 目录 - C源代码实现scripts/ 目录 - Python脚本实现include/ 目录 - C头文件library/ 目录 - 核心库和第三方依赖models/ 目录 - 预训练模型库launch/ 目录 - ROS启动文件worlds/ 目录 - Gazebo仿真世…

InternVL2.5-多模态大模型评估专业图片

具备图像理解功能的大模型InternVL2.5&#xff0c;能有效解析大部分图片。 对于专业图片如医学细胞切片&#xff0c;从专业角度解析&#xff0c;能推动模型应用到更广泛的领域。 InternVL2.5解析示例 prompt(胸部癌变细胞图片,来自PanNuke) 请评估这个组织的风险 InternVL2.…

解决 IDEA 在运行时中文乱码问题

直接说解决办法 编译 IDEA 所在目录的启动的 .vmoptions 文件&#xff0c;添加以下JVM 参数即可 -Dfile.encodingUTF-8如下图所示&#xff0c;Help > Edit Custom VM Options&#xff0c;随后在编辑框中添加-Dfile.encodingUTF-8 的 JVM 参数

【Linux】进程的生命之旅——诞生、消逝与守候(fork/exit/wait)

&#x1f3ac; 个人主页&#xff1a;谁在夜里看海. &#x1f4d6; 个人专栏&#xff1a;《C系列》《Linux系列》《算法系列》 ⛰️ 一念既出&#xff0c;万山无阻 目录 &#x1f4d6;一、进程创建 1.fork函数 &#x1f4da;高层封装特性 &#x1f4da;fork返回值 2.写时拷…

《Linux权威指南:从小白到系统管理员(上册)》深度解析与实践指南

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【星海网址导航】摸鱼、技术交流群&#x1f449; 点此查看详情 引言 Linux 作为现代计算的核心操作系统之一&#xff0c;广泛应用于服务器、云计算、嵌入式开发等领域。《Linux权威指南&#xff1a;从小白到系统管理…

【Linux】信号

目录 一、信号的概念二、信号的产生2.1 通过键盘进行信号的产生2.2 通过系统调用进行信号的产生2.2.1 kill函数2.2.2 raise函数2.2.3 abort函数 2.3 通过异常的方式进行信号的产生2.4 通过软件条件的方式进行信号的产生2.4.1 关闭管道读端2.4.2 alarm函数 2.5 Core Dump&#x…