vue组件prop变量和内部变量数据格式不一样时,变量同步prop值,变量改变通知父组件.

vue组件含有v-model的props,当对其进行封装,想对该属性进行双向绑定时,可以采用computed的方式包一层get(){return props.xxx},set(v)=>{emit('update:xxx',v)},或者使用vueuseuseModel来深层代理,但是只适合要封装的组件prop的内部的变量数据类型一致,不一致就只能拆开写,通过watch监听prop更新内部变量, 然后内部变量在内部的v-model变化时抛出事件通知父组件.
father.vue

<template><div><Child v-model:form-state="obj" @change="onChange"></Child></div>
</template><script setup>
import { ref } from "vue";
import Child from "./Child.vue";const obj = ref({test: "xihu"
});const onChange = state => {console.log("父组件监听", state);
};
</script><style lang="less" scoped></style>

Child.vue

<template><div><a-form :model="_formState"><a-form-item label="tewst"><a-cascaderv-model:value="_formState.test":options="options"placeholder="Please select"/></a-form-item></a-form></div>
</template><script setup>
import { ref, watch } from "vue";
import { cloneDeep } from "lodash-es";const props = defineProps({formState: {type: Object,default: () => ({ test: "" })},transform: {type: Function}
});const emit = defineEmits(["change", "update:formState"]);
const _formState = ref({test: []
});const options = [{value: "zhejiang",label: "Zhejiang",children: [{value: "hangzhou",label: "Hangzhou",children: [{value: "xihu",label: "West Lake"}]}]},{value: "jiangsu",label: "Jiangsu",children: [{value: "nanjing",label: "Nanjing",children: [{value: "zhonghuamen",label: "Zhong Hua Men"}]}]}
];watch(() => props.formState,v => {const findPathById = (treeArr, id) => {const path = [];let isFind = false;const traverse = nodes => {if (!Array.isArray(nodes)) return;for (const node of nodes) {if (isFind) return;const { value, children } = node;path.push(value);if (value == id) {isFind = true;return;}if (children && children.length) {traverse(children);}if (!isFind) {path.pop();}}};traverse(treeArr);return path;};if (props.formState && props.formState.test) {_formState.value.test = findPathById(options, props.formState?.test);}},{immediate: true}
);
watch(() => _formState.value,newState => {emit("change", newState);// ❌ emit("update:formState",newState) 这里如果进行双向绑定,会触发上面的watch无限循环},{deep: true,immediate: true}
);
</script><style lang="less" scoped></style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/507879.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql移动文件后打不开_Windows端MySQL data目录迁移(貌似会启动不了)

遇到一个现场问题&#xff0c;实施人员把mysql的data放在C盘&#xff0c;用过一阵以后C盘快满了。于是准备做数据迁移&#xff0c;想到如下几种方案(均需要先把mysql服务停掉)&#xff1a;1.转储SQL文件但是问题是&#xff0c;想要迁移的库占了1.5T&#xff0c;是T啊&#xff0…

302 found是什么意思_犯罪大师心中的恶魔答案是什么 心中的恶魔答案真相分析...

犯罪大师是今年很热门的一个破案题材的游戏&#xff0c;游戏中有很多匪夷所思的案件&#xff0c;需要玩家解答&#xff0c;游戏中经常更新一些突发案件&#xff0c;最新的突发案件是心中的恶魔是一个很不错的案件&#xff0c;那么到底要怎么才能找到正确的凶手呢&#xff1f;希…

mysql源码安装报错_mysql 的二进制和源码包 安装的报错总结

MySQL报错总结报错原因&#xff1a;/application/mysql-5.6.44/tmp不存在解决方法&#xff1a;mkdir /application/mysql-5.6.44/tmp报错原因&#xff1a; /application/mysql-5.6.44/存放socket 目录没有权限解决方法&#xff1a;chown -R mysql.mysql /application/mysql-5.6…

hao123电脑版主页_建议Lenovo用户卸载监守自盗的联想电脑管家

最近我一直很迷惑&#xff0c;作为一个不用笔记本电脑上xxxxhub/2048等奇妙平台的正经大学生&#xff0c;为什么时而会出现辣鸡页游广告弹窗&#xff1f;好吧&#xff0c;最后我耐心等待&#xff0c;终于在某次弹出垃圾广告的时候定位了这个进程——AdvPopForm.exe在“wprst”的…

mysql 自增 不是主键_程序员经典面试题,MySQL自增主键为什么不连续

在我们日常使用Mysql中&#xff0c;如果不是特殊的业务需要&#xff0c;一般我们都会使用自增主键&#xff0c;自增主键的好处可以在插入的时候尽量地减少页分割&#xff0c;增加Mysql的写入效率。我们有时候就会发现&#xff0c;自增主键并不是连续递增的&#xff0c;为什么有…

怎么彻底重装清空电脑_电脑开不了机怎么重装系统?不用送去维修店啦!

小白系统免费的人工客服点击联系电脑无法启动的时候怎么办呢&#xff1f;很多朋友直接送去电脑城了&#xff0c;但是去一次就如同在百度上查询自己得了什么病是一样的&#xff0c;查一下自己不舒服就癌症了&#xff0c;电脑城查一下就问你卖多少钱&#xff0c;费时费力&#xf…

安装mysql无法登录_【windows 下安装 mysql-server 无法登录问题解决】

----------------------------- 无感的首行 -----------------------------新版 mysql-server 5.7 安装后发现无法使用 mysql -uroot (-p) 来登录&#xff0c;查了下文档发现新版在安装时会初始化一个密码放在启动的错误文件里&#xff0c;错误文件的路径 %mysql-server-dir%da…

日语输入法电脑版_日语轻松入门小百科

如果你一直以来都对日语抱有强烈的兴趣&#xff0c;那么就赶紧跟我一起轻松入门吧~科普之一&#xff1a;日语五十音图什么是假名&#xff1f;什么是五十音图&#xff1f;日语的字母叫做假名&#xff0c;每个假名代表一个音节。假名有两种书写方式&#xff0c;即平假名和片假名&…

jta mysql_JTA 使用 MySQL 分布式事务

假定在MySQL实例1上有表create table person(id int,name varchar(32))MySQL实例2上也有一张同样的表&#xff0c;现在从实例1中的 person 表中删除一条数据&#xff0c;并把这条数据插入到实例2的表中&#xff0c;这两个操作在同一个事务中&#xff0c;因为跨越了数据库实例&a…

mysql load average_紧急求助:load average太高了!!

站点同时在线人数300人左右&#xff0c;top出来的load average超过4,有时达到了8点多&#xff01;sleeping进程达到了三百多&#xff01;大部分是来自apache&#xff0c;导致房问速度很慢&#xff01;&#xff01;不知问题出在哪里&#xff0c;请高手赐教&#xff0c;谢谢&…

a jni error has occurred_A-08 幂函数、有理函数、代数函数

欢迎光临我的专栏《微积分学习之旅》&#xff0c;一起学习&#xff0c;共同提高。函数是微积分的基础&#xff0c;我们已经学习了直线函数和多项式函数&#xff0c;本篇中我们继续学习幂函数、有理函数和代数函数。幂函数&#xff08;Power Functions&#xff09;如果一个函数形…

mysql 求两列数据组合_mysql – 将两个具有不同列数的查询组合在一起

我有两个查询要组合成单个输出,我不能使用UNIOn,因为它们具有不同的列数.该表是ref,字段id为refid cellid cat,其中包含整数查询1&#xff1a;查找每个唯一cellid的总行数SELECT cellid,COUNT(*) totalcount,cat FROM rel GROUP BY cellid查询2&#xff1a;为每个唯一的cellid查…

echarts 浏览器兼容性_谷歌浏览器不再使用quot;黑名单quot; / iPhone可能放弃lightning充电口//微软中国被列为被执行人/QQ 音乐上线...

# 避免种族歧视 &#xff0c;谷歌浏览器将不再使用"黑名单"6月9日报道&#xff0c;由于全球各地反对种族歧视的呼声高涨&#xff0c;谷歌决定修改Chrome浏览器中可能引发种族歧视联想的表述&#xff0c;包括“黑名单”、“白名单”等词。报道称&#xff0c;谷歌将通过…

python输出结果每5个换行_python for循环 - python基础入门(11)

文章首发微信公众号&#xff0c;微信搜索&#xff1a;猿说python在python开发中&#xff0c;除了前篇文章介绍的while循环还有一个for循环也经常使用&#xff0c;两者使用都是大同小异&#xff0c;for循环的使用相对于while循环更加灵活&#xff0c;下面我们一起来了解下具体区…

cad钣金展开插件_钣金折弯展开的计算方法汇总

提醒&#xff1a;点上方↑↑↑“钣金学习网”免费关注90度折弯折弯系数最简单的计算方法就属90度折弯系数经验公式&#xff1a;1.7倍料厚计算方法了。这个公式是怎么使用的&#xff1f;用在90钣金折弯加工中&#xff0c;一个直角弯减去1.7倍的料厚。比如&#xff1a;材料是1mm铁…

pcb设计实战与应用智能手机_一种针对毫米波雷达天线应用而优化设计的PCB层压板...

常见的复合材料印制电路板(PCB)其介质层大多采用玻璃纤维作为填充料&#xff0c;但是由于玻璃纤维特殊的编织结构&#xff0c;导致PCB板局部的介电常数(Dk)会发生变化。尤其是在毫米波(mmWave)频率下&#xff0c;较薄层压板的玻璃编织效应会更加明显&#xff0c;Dk的局部不均匀…

mysql 5.5 替换字符_MySQL replace函数替换字符串语句的用法

MySQL replace函数我们经常用到&#xff0c;下面就为您详细介绍MySQL replace函数的用法&#xff0c;希望对您学习MySQL replace函数方面能有所启迪。最近在研究CMS&#xff0c;在数据转换的时候需要用到mysql的MySQL replace函数&#xff0c;这里简单介绍一下。比如你要将表 t…

GPS 校验和 代码_Linux recovery 移除签名校验

原创作者&#xff1a;王锐&#xff0c;多年 Linux 系统、龙芯平台移植与优化研发经验&#xff0c;Linux Contributor、Mozillian。背景某个设备配套的刷机程序是个 Linux recovery kernel&#xff0c;刷机过程会先从U盘加载刷机脚本&#xff0c;仅在签名校验通过后才执行脚本。…

mysql xp系统时间_mysql时间类型year

date:年月日datetime:年月日时分秒,保存确定的时间点的时候,存储形式yyyy-mm-dd hh:MM-dd,暂用8个字节timestamp:时间从.存储时是整形数字,表现形式是yyyy-mm-dd hh:MM-dd,暂用4个字节,取值范围,1970-01-01 00:00:00到2038year:1个字节 1901-2155,可以用0000表示默认值,如果输…

shell su 密码_[SU模型] 59个公共卫生间

介绍 - Introduce名称&#xff5c;59个公共卫生间格式&#xff5c;skp大小&#xff5c;127 MB获取方式&#xff5c;免费获取嗨&#xff0c;大家好~今天给大家分享的是59个公共卫生间模型。文末获取素材- 部分素材内容的预览图如下 -A | ZD有一个计划&#xff1a;前期在公众平台…