vue中,假如子组件在created发送了一个异步请求,父组件在mouted内发送一个异步请求,如何保证父组件在异步请求后能够拿到子组件异步数据。也就是说我希望在子组件和父组件异步都结束后拿到两者的值做一些操作,请问这个有什么比较好的办法嘛。
vue中,假如子组件在created发送了一个异步请求,父组件在mouted内发送一个异步请求,如何保证父组件在异步请求后能够拿到子组件异步数据。也就是说我希望在子组件和父组件异步都结束后拿到两者的值做一些操作,请问这个有什么比较好的办法嘛。
生命周期中发起的异步请求,并不能够有效保证。只能说在子组件请求玩数据之后通过 $emit
向父级传递事件出来,父级在单独处理一下就好了。
但是不能保证子元素接口数据返回时父级数据的数据也返回了,所以需要在两处都做处理。
子元素获取到数据之后通过 $emit
通知父级,父级触发绑定的自定义事件之后检查父级的数据是否返回,如果返回则继续处理。如果没有返回则直接 return
。然后父级异步请求数据返回之后也判断一下子组件的数据已经获取到,如果没有也是直接 return
。
举个简单例子就是
<template>
<div class="parent">
<chlid-component ref="chlid" @load="handleChlidDataLoad" />
</div>
<template>
<script>
import axios from 'axios'
import chlidComponent from './chlidComponent'
export default {
components: { chlidComponent },
data(){
return {
list: []
}
},
mounted() {
this.fetchRemoteData()
},
methods: {
fetchRemoteData(){
axios.get('xxx').then(res => {
this.list = res.data
this.handleChlidDataLoad()
})
},
handleChlidDataLoad() {
if(!this.$refs.chlid?.list.length || !this.list.length) return
// ...
}
}
}
</script>
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
可以考虑将子组件中的异步方法改造为由父组件来调用,示例如下: