vue父传子传值时子组件的props对应的值的default不能生效

问题

在用vue开发时碰到父组件传值子组件时不能触发子组件的props里对应的值的default值。

父组件代码:

<template> <div> <TabOrderClaim :compData="companyInfo" ></TabOrderClaim> </div> </template> <script> import TabOrderClaim from './child/tab-order-claim' export default { components: { TabOrderClaim, }, data() { return { companyInfo: {}, //公司信息 } }, computed: {}, created() { }, mounted() {}, methods: { }, } </script> <style lang="scss" scoped> </style>

子组件:

<template> <div> <div> <div> <div> <span> {{ companyObject.data.taxname === '' ? '[请填入营业执照公司全称]' : companyObject.data.taxname }} </span> <span> {{ companyObject.data.taxno === '' ? '[请填入社会统一信用编码]' : companyObject.data.taxno }}</span> </div> </div> </div> </div> </template> <script> export default { props: { compData: { type: Object, default: function() { return { code: 200, data: { taxname: '', taxno: '', }, msg: '', } }, }, }, data() { return { companyObject: this.compData, orderClaimInfo: false, } }, computed: {}, created() {}, mounted() {}, methods: { }, watch: { compData(value) { console.log(value) this.companyObject = value }, }, } </script> <style lang="scss" scoped> </style>

解决方法

将父组件data return中的companyInfo修改为undefined,则子组件的props中对应的值的default生效。

data() { return { companyInfo: {}, //公司信息 } },

修改为

data() { return { companyInfo: undefined, //公司信息 } },

原因

vue中认为 "" / {} 等是初始化值了,所以传入值触发不了default,同时 undefined 一般是不会认为设置值的

由于项目的需求是父组件异步请求数据之后将数据传给子组件,但实际操作后发现子组件没有获取到父组件请求的值的。其原因归咎于在父组件的异步请求完成之前子组件就已经完成了赋值,但由于父组件传给子组件的数据只会渲染一次ui界面,所以后续的数据更新后子组件显示的数据依然不会变化。此刻就需要watch函数监听数据变化再一次赋值子组件的data层,让其再次渲染一遍。
父组件子组件的加载顺序如图:
img
同时提一句,在子组件的mounted钩子函数里拿不到父组件传过来的异步数据是由于子组件比父组件先mounted。

最后

十分感谢原博客博主,原博客地址:

posted @   DAmarkday  阅读(1856)  评论(0编辑  收藏  举报
编辑推荐:
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示