vue中父组件异步获取数据给子组件传参

问题:

inferenceData:是父组件异步请求后获取的数据,获取成功之后父组件给子组件传递此数据,子组件使用,子组件获取不到inferenceData的值,打印结果为空数据,结果没有传递过去。

原因:异步请求还未获取到结果,已经初始化加载了子组件。

父组件:

 <el-main  v-loading="loading"
                          element-loading-text="拼命加载中"
                          element-loading-spinner="el-icon-loading"
                          element-loading-background="rgba(0, 0, 0, 0.8)" class="xb-main-table prescription-left-home xb-bg">
                    <Inference :inferenceData="inferenceData" :sendIndex="sendIndex"  :visitId="visitId"></Inference>
                </el-main>
created(){
    this.getInference();
},
methods:{
    async getInference() {
                const response = await inference(this, this.visitId);
                const data = response.data;
                console.log('----------------------获取推演图数据接口-------------------')
                console.log(data)
                if(response.code == 0){
                    for(var i = 0; i < data.length; i ++){
                        data[i].prescData = JSON.parse(data[i].prescData);
                        data[i].transferData = JSON.parse(data[i].transferData);
                    }
                    this.drugState = data[0].drugState;
                    this.treat = data[0].treat;
                    this.disease = data[0].disease;
                    //签名时默认传推演图第一个id,药方第一个id;
                    this.inferenceTransferId = data[0].id;
                    this.prescriptionDataList = data[0].prescData;//签名时默认第一个药方药材;
                    this.inferenceData = data;//非空的数组
                    this.loading = false;
                }

            },
}

子组件:

 props:{
            inferenceData:Array
        },
        mounted() {
console.log(this.inferenceData)//空数组。
            this.initCharts();
        },
methods:{
    initCharts(){
                let myChart = this.$echarts.init(this.$refs.chart);
                myChart.setOption(option);
                var myChartData = this.inferenceData[this.sendIndex].transferData;
                this.data = myChartData.data;
                this.links = myChartData.links;
                myChart.setOption({
                    series: [{
                        data: this.data,  //将异步请求获取到的数据进行装载
                        links:this.links
                    }]
                })
            }
}

解决方法:

在父组件异步请求成功后再初始化子组件,引用子组件时添加v-if="flag"

flag初始化为:false.

在异步请求成功后更改flag状态为true。

<el-main  v-loading="loading"
                          element-loading-text="拼命加载中"
                          element-loading-spinner="el-icon-loading"
                          element-loading-background="rgba(0, 0, 0, 0.8)" class="xb-main-table prescription-left-home xb-bg">
                    <Inference  v-if="flag" :inferenceData="inferenceData" :sendIndex="sendIndex"  :visitId="visitId"></Inference>
 </el-main>
async getInference() {
                const response = await inference(this, this.visitId);
                const data = response.data;
                console.log('----------------------获取推演图数据接口-------------------')
                console.log(data)
                if(response.code == 0){
                    for(var i = 0; i < data.length; i ++){
                        data[i].prescData = JSON.parse(data[i].prescData);
                        data[i].transferData = JSON.parse(data[i].transferData);
                    }
                    this.drugState = data[0].drugState;
                    this.treat = data[0].treat;
                    this.disease = data[0].disease;
                    //签名时默认传推演图第一个id,药方第一个id;
                    this.inferenceTransferId = data[0].id;
                    this.prescriptionDataList = data[0].prescData;//签名时默认第一个药方药材;
                    this.inferenceData = data;
                    this.loading = false;
                    this.flag = true;//状态更改
                }

            },

此时子组件在mounted中打印为非空数组。

其余解决方法:https://www.cnblogs.com/goloving/p/9114389.html

Vue中,当父组件无法获取组件数据时,可以考虑以下两种方法来解决这个问题。 第一种方法是使用事件机制。在组件中使用 `$emit` 方法触发一个自定义事件,然后在父组件中通过在组件上监听该事件,并在事件处理函数中获取组件传递数据。这样可以确保在父组件获取组件数据时的时机是正确的。 第二种方法是使用`$nextTick`方法。在父组件中,可以通过`$nextTick`方法来确保组件已经加载完毕并渲染完成后再获取数据。`$nextTick`方法会在DOM更新完成之后执行回调函数,这样可以保证在回调函数中获取组件数据时不会出现获取不到的情况。 综合以上两种方法,我们可以在父组件中判断是否已经获取到了数据,如果获取到了数据再渲染组件,这样可以确保组件一定是等父组件准备好数据后再加载,从而解决父组件无法获取组件数据的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Vue组件调用组件组件调用父组件,动态切换组件找不到组件的解决办法](https://blog.csdn.net/wafangdianwangning/article/details/95861658)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [vue爬坑之 父组件组件异步传参 组件中拿不到值的解决方法](https://blog.csdn.net/dyw3390199/article/details/114649431)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值