vue自定义组件实现v-model双向数据绑定
一、Vue2 实现自定义组件双向数据绑定
① v-model 实现双向数据绑定
在vue2中,子组件上使用v-model的值默认绑定到子组件的props.value属性上,由于子组件不能改变父组件传来的属性,所以需要通过$emit触发事件使得父组件中数据的变化,然后再同步到子组件。vue2默认触发v-model数据变化的事件为input。
使用如下:
子组件MySon
<template><div><div>双向数据绑定:{{$props.value}}</div><div><button @click="addValue">点击++</button></div></div>
</template>
<script>
export default {name: "MySon",props: ['value'],methods: {addValue() {// 触发父组件中v-model绑定数据的变化,由于不能改变props数据中的值,所以不要写this.$props.value++这样的操作this.$emit('input', this.$props.value + 1)}}
}
</script>
如果希望改变接收v-model的属性或改变触发v-model数据变化的事件,可通过model:{}配置实现,如:
<template><div><div>双向数据绑定:{{$props.value666}}</div><div><button @click="addValue666">点击++</button></div></div>
</template>
<script>
export default {name: "MySon",props: ['value666'],// --> 配置接收v-model数据的属性以及改变数据的事件 <--model: {prop: 'value666',event: 'updateValue666'},methods: {addValue666() {this.$emit('updateValue666', this.$props.value666 + 1)}}
}
</script>
父组件
<template><div id="app"><MySon v-model="num"></MySon></div>
</template>
<script>
import MySon from "@/components/MySon.vue";
export default {name: 'App',components: {//注册子组件MySon},watch: {// 监视num数据的变化 num(newValue, oldValue) {console.log('num: ' + oldValue + ' -> ' + newValue)},},data() {return {num: 10,}},
}
</script>
② .sync 实现子组件多个数据双向绑定
在Vue2中使用v-model只能使用一次,如果要实现多个双向数据绑定,可以借助.sync修饰,使用语法为 :属性.sync="数据"
,用这种绑定代替v-model,触发数据改变的事件为update:属性名
使用如下:
子组件
<template><div><div>sync双向数据绑定:{{$props.data}}</div><div><button @click="addData">点击++</button></div></div>
</template>
<script>
export default {name: "MySon",// 用props.data属性接收双向绑定的数据 props: ['data'],methods: {addData() {// 触发 update:data 事件改变父组件中绑定的值 this.$emit('update:data', this.$props.data + 1)}}
}
</script>
父组件
<template><div id="app"><!-- 用 :data.sync 将数据双向绑定到子组件的data属性上 --> <MySon :data.sync="num"></MySon></div>
</template>
<script>
import MySon from "@/components/MySon.vue";
export default {name: 'App',components: {MySon},watch: {num(newValue, oldValue) {console.log('num: ' + oldValue + ' -> ' + newValue)}},data() {return {num: 10}},
}
</script>
至于为什么子组件要通过$emit('update:属性名', 数据);来触发父组件数据变化,原因如下:
<MySon :data.sync="num"></MySon>||\/等价于
<MySon :data="num" @update:data="(newData) => {num = newData}"></MySon>
二、Vue3 实现双向数据绑定
在Vue3中,v-model可以实现多个数据双向数据绑定,同时.sync修饰符已经不再生效。
① v-model 实现双向数据绑定
vue3中子组件上使用v-model绑定的数据默认传到子组件的props.modelValue属性上(vue2是props.value属性),并且默认触发数据变化的事件为update:modelValue
(vue2为input
)
使用如下:
子组件
<template><div><div>双向数据绑定modelValue:{{props.modelValue}}</div><div><button @click="addModelValue">点击++</button></div></div>
</template>
<script setup>// props.modelValue接收v-model绑定的数据const props = defineProps(['modelValue'])const emit = defineEmits(['update:modelValue'])function addModelValue(){// 触发父组件中双向绑定数据的变化emit('update:modelValue', props.modelValue + 1)}
</script>
父组件
<template><Son v-model="num"></Son>
</template>
<script setup>import {ref, watch} from "vue";import Son from "@/components/Son.vue"; const num = ref(0)// 监视num数据变化watch(num, (newValue, oldValue) => {console.log('num: ' + oldValue + '->' + newValue)})
</script>
② v-model: 属性
实现多个数据双向绑定
数据绑定语法:v-model:属性="数据"
触发数据变化的事件:update:属性
使用如下:
子组件
<template><div><div>双向数据绑定data:{{props.data}}</div><div><button @click="addData">点击++</button></div></div>
</template>
<script setup>const props = defineProps(['data'])const emit = defineEmits(['update:data'])const addData = () => {emit('update:data', props.data + 1)}
</script>
父组件
<template><!-- 将num数据绑定到子组件的data属性上 --><Son v-model:data="num"></Son>
</template>
<script setup>import {ref, watch} from "vue";import Son from "@/components/Son.vue";const num = ref(0)watch(num, (newValue, oldValue) => {console.log('num: ' + oldValue + '->' + newValue)})
</script>
相关文章:

vue自定义组件实现v-model双向数据绑定
一、Vue2 实现自定义组件双向数据绑定 ① v-model 实现双向数据绑定 在vue2中,子组件上使用v-model的值默认绑定到子组件的props.value属性上,由于子组件不能改变父组件传来的属性,所以需要通过$emit触发事件使得父组件中数据的变化…...

excel指定单元格输入相同的值,比如给D1~D10000输入现在的值
注意,一点不用用WPS,不然运行宏是会报:Droiact-Module1,第1行等Λ列语法错误: Unexpected identifier 步骤 1,altF11打开宏 2,输入脚本 3,点击运行按钮 成功后会看看到...

中国最强乳企伊利,三个季度净赚超百亿
伊利三季度的业绩完全超出了市场预期。 在一个飞天茅台都在不断跌价的消费趋势里,伊利三季度扣非净利润的同比增幅达到13.4%。大部分机构和投资者,都没料到伊利这一次的表现如此强悍。这一次,伊利在“大气层”。 并且,伊利前三季…...

SpringBoot源码解析(二):启动流程之引导上下文DefaultBootstrapContext
SpringBoot源码系列文章 SpringBoot源码解析(一):启动流程之SpringApplication构造方法 SpringBoot源码解析(二):启动流程之引导上下文DefaultBootstrapContext 目录 前言一、入口二、DefaultBootstrapContext1、BootstrapRegistry接口2、BootstrapCon…...

配置elk插件安全访问elk前台页面
编辑els配置文件vim elasticsearch.yml,添加以下配置文件 用elk用户,启动els服务 关闭防火墙,查看els启动是否成功,通过是否启动java进程来判断 或者通过查看是否启动9200和9300端口来判断是否启动 交互模式启动密码配置文件interactive表示交…...

[操作系统作业]页面置换算法实现(C++)
💓博主csdn个人主页:小小unicorn ⏩专栏分类:linux 🚚代码仓库:小小unicorn的代码仓库🚚 🌹🌹🌹关注我带你学习编程知识 目录 必做题代码分析(重点以时间统计…...

前端技术月刊-2024.11
本月技术月刊聚焦于前端技术的最新发展和业务实践。业界资讯部分,React Native 0.76 版本发布,带来全新架构;Deno 2.0 和 Node.js 23 版本更新,推动 JavaScript 生态进步;Flutter 团队规模缩减,引发社区关注…...

搜索引擎语法大全(Google、bing、baidu)
搜索引擎语法大全 搜索引擎语法通常指的是在搜索引擎中使用特定的运算符和语法来优化搜索结果。 提高搜索精度:使用特定的语法可以帮助用户更精确地找到相关信息,避免无关结果。例如,通过使用引号搜索确切短语,可以确保搜索结果包…...

java设计模式之行为型模式(11种)
行为型模式 行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。 行为型模式分为类行为模式和对象型模式,前者采用继承机制来在类间分派…...

微服务系列一:基础拆分实践
目录 前言 一、认识微服务 1.1 单体架构 VS 微服务架构 1.2 微服务的集大成者:SpringCloud 1.3 微服务拆分原则 1.4 微服务拆分方式 二、微服务拆分入门步骤 :以拆分商品模块为例 三、服务注册订阅与远程调用:以拆分购物车为例 3.1 …...

leetcode 1470.重新排列数组
1.题目要求: 2.题目代码: class Solution { public:vector<int> shuffle(vector<int>& nums, int n) {vector<int> x_array(nums.begin(),nums.begin() n);vector<int> y_array(nums.begin() n,nums.end());int x_index 0;int y_index 0;for…...

windows在两台机器上测试 MySQL 集群实现实时备份
在两台机器上测试 MySQL 集群实现实时备份的基本步骤: 一、环境准备 机器配置 确保两台机器(假设为服务器 A 和服务器 B)能够互相通信,例如它们在同一个局域网内,并且开放了 MySQL 通信所需的端口(默认是 …...

点晴模切ERP系统助力模切企业转型升级之路
随着我国制造业规模不断扩大,中国制造业已经从高速扩张转向深入挖潜的关键阶段。数字化转型不仅有助于提升企业的生产效率和管理水平,还能有效应对市场竞争,实现可持续发展。在数字化转型的过程中,企业资源规划(ERP&am…...

redis修改配置文件配置密码开启远程访问后台运行
编辑 Redis 配置文件 编辑 /etc/redis/redis.conf,设置必要的参数。 sudo vim /etc/redis/redis.conf设置后台运行: 找到以下行,将 no 改为 yes: daemonize yes设置密码: 找到以下行,取消注释并设置密码为…...

市场分化!汽车零部件「变天」
全球汽车市场的动荡不安,还在持续。 本周,全球TOP20汽车零部件公司—安波福(Aptiv)发布2024年第三季度财报显示,三季度公司经调整后确认收入同比下降6%;按照区域市场来看,也几乎是清一色的下滑景…...

SCSS在Vue中的用法
SCSS在Vue中的用法 一、安装相关依赖1、安装sass - loader和node - sass(或dart - sass) 二、在组件中使用SCSS1、单文件组件(.vue)中的样式使用2、**全局样式使用SCSS**3、在组件中使用变量和混入(Mixins)…...

CPU用户时间百分比
在计算机系统中,"CPU用户时间百分比(CPU User Time)"是一个性能监控指标,它描述了CPU在用户模式下执行的累积时间与总的CPU时间的比例。这个指标可以帮助我们了解系统在执行用户态程序时的负载情况。下面是一些关于CPU用…...

RN中的StyleSheet
一、RN中样式的特点 RN的样式和前端的CSS的样式有一些区别。主要如下: RN中的样式 前端的CSS 继承性 没有继承性 有继承性 命名 fontSize(小驼峰命名) font-size 尺寸单位 with: 100 With: 100px 特殊的样式名 marginHorizontal…...

Swift 开发教程系列 - 第1章:Swift 简介与开发环境配置
在开始开发 Swift 应用之前,了解 Swift 语言的背景和设置开发环境非常重要。接下来,我们将逐步介绍 Swift 的基本概念,并带你完成开发环境的安装和项目创建。 1.1 Swift 简介 Swift 是由 Apple 开发的一种现代化编程语言,于 201…...

躺平成长-下一个更新的数据(躺平成长数据显示核心)
旭日图(Sunburst Chart)是一种用于展示具有层次结构数据的可视化图表。 开源竞争: (当你无法掌握技术的时候,就开源这个技术,培养出更多的技术依赖,让更多的人帮助你完善你的技术,那…...

你们接口怎么测?有没有完完整整的把一个接口测下来?
面试官在问到这道问题的时候,我们应该这么去回答,根据自己技术掌握的水准进行由浅入深的回答。 基础: 我们接口测试之前,开发都会有一份接口文档给到我们,我们要分析接口中的入参和响应。 针对入参的参数类型和参数…...

Pinia-状态管理
Pinia-状态管理 特点: 1. 轻量和模块化 Pinia 是一个轻量级的状态管理库,支持模块化管理,即可以将应用的状态分成多个 store 以实现更好的组织。使用 Pinia,可以定义多个 store,每个 store 都是一个独立的模块&#x…...

IP系列之bscan讨论
1、做Bcan前首先要确定ip_vender是否已经在phy_level做好了bscan_chian??? 若已经做好,那么vender会给一个XXX.bsdl文件,结合详细的ip文档指导手册,确定bscan_chain是在内部的tap下挂着,还是单…...

Centos安装配置Jenkins
下载安装 注意:推荐的LTS版本对部分插件不适配,直接用最新的版本,jenkins还需要用到git和maven,服务器上已经安装,可查看参考文档[1]、[2],本次不再演示 访问开始使用 Jenkins 下载jenkins 上传至服务器…...

创新医疗突破:新型穿刺器显著提高手术安全性与效率
据QYResearch调研团队最新报告“中国穿刺器市场报告2023-2029”显示,预计2029年中国穿刺器市场规模将达到18.5亿美元,未来几年年复合增长率CAGR为18.1%。 如上图表/数据,摘自QYResearch最新报告“中国穿刺器市场研究报告2023-2029. 如上图表/…...

【MySQL】可重复读级别下基于Next Key Lock解决幻读
昨天读到了一篇文章[1],里面讲,面试官说mysql的可重复读级别下有解决幻读的方式,最后公布了答案,是在sql后面加for update。这么说倒是没错,但是这种问法给我一种奇怪的感觉,因为for update无论在哪个隔离级…...

【安全性分析】正式安全分析与非正式安全分析
安全性分析-系列文章目录 第一章 【安全性分析】正式安全分析与非正式安全分析 第二章 【安全性分析】BAN逻辑 (BAN Logic) 文章目录 安全性分析-系列文章目录前言一、正式安全分析1. 理想化模型(如随机预言机模型)2. 标准模型(Standard Model)3. 形式化验证4. 数学证明二…...

【项目开发】高校思政课程实践任务平台—数据库设计
未经许可,不得转载。 文章目录 1、项目需求2、数据库选型3、概念数据模型设计3.1、实体及属性3.2、实体关系3.3、补充说明4、数据库语句4.1、数据库对象创建语句4.2、功能实现的SQL语句4.3、视图创建语句4.4、触发器创建语句5、安全性考虑5.1、用户认证和授权5.2、数据传输安全…...

计算机网络安全应该学习哪些知识?
计算机网络安全是一个广泛而深入的领域,要成为一名专业的网络安全专家,需要系统地学习多个方面的知识。以下是一些关键的学习方向: 一、基础知识计算机网络:学习OSI、TCP/IP模型,网络协议,网络设备工作原理…...

logrotate工具强制日志轮询
说明: 1、通过定时任务logrotate工具每天强制日志轮询并压缩,节省存储空间。 参数说明: 1)/opt/yolov5/logs/.log: 是指要轮转日志文件的路径和名称。 是一个通配符,表示匹配以*.log结尾文件名。 2)daily: 是指日志文件每天轮转一次。 3)dateext: 是指轮转的日志文件名中…...