有2个组件 TestA(如下简写A) 和 TestB(如下简写B),B 是 A 的子组件。vue
TestA.vueajax
<template>
<div>
<span>{{ aData }}</span>
<test-b @request-event="ajaxRequest"></test-b>
</div>
</template>
<script>
import TestB from './TestB'
export default {
components: {
TestB
},
data () {
return {
aData: 'A-wait'
}
},
methods: {
ajaxRequest () {
this.mockRequest().then(res => {
// 修改 TestA 的数据
this.aData = res
// TODO: 修改 TestB 组件中 bData 数据的值为 B-ready
// 处理父组件中其余业务
this.dealOtherAction()
})
},
dealOtherAction () {
// do other actions
},
mockRequest () {
/**
* 此方法模拟 ajax 请求的延迟
*/
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('A-ready')
}, 3000)
})
}
}
}
</script>
复制代码
TestB.vuebash
<template>
<div>
<span>{{ bData }}</span>
<button type="button" @click="requestEvent">ClickMe</button>
</div>
</template>
<script>
export default {
name: 'TestB',
data () {
return {
bData: 'B-wait'
}
},
methods: {
requestEvent () {
this.$emit('request-event')
}
}
}
</script>
复制代码
B 组件中有一个按钮能够触发 A 组件发送异步请求,在请求的回调中按顺序处理一些逻辑(修改 A 中数据 -> 修改 B 中数据 -> 继续 A 组件其余逻辑),TODO 是未完成的部分。异步
PS:有问题请评论回复。ui