gpt4 book ai didi

javascript - 等待祖 parent 组件的方法在孙子组件中得到解析

转载 作者:行者123 更新时间:2023-12-01 00:55:50 26 4
gpt4 key购买 nike

我的 vue 应用程序中有三个组件:

  • 家:(巴顿的祖 parent )
  • 对话框:(Home 的子级/Button 的父级)
  • 按钮:(家的孙子)

Home 组件有一个异步方法:

async handleDialogAccept() {
try {
const response = await this.$axios.get('https://jsonplaceholder.typicode.com/todos/');
console.log(response.data);
} catch (err) {
console.log(err);
}
},

一旦 Dialog 组件发出“accept”自定义事件,它将立即执行:

<dialog-confirmation
@accept="handleDialogAccept()"
/>

Dialog 组件有一个子组件 (Button):

<button-accept
v-on="$listeners"
>
Accept
</button-accept>

在我的buttonAccept.vue中,它被导入到Dialog中并如上所示使用,具有以下结构:

<template>
<v-btn
color="primary"
@click="handleClick()"
:loading="loading"
:disabled="loading"
>
<slot name="accept"></slot>
</v-btn>
</template>

<script>
export default {
props: ['parentFunction'],
data() {
return {
loading: false,
};
},
methods: {
handleClick() {
this.$emit('accept');
},
},
};
</script>

我想在 handleClick 方法中执行后续步骤:

  1. loading设置为true
  2. 发出接受自定义事件
  3. 等待handleDialogAccept完成
  4. loading 设置为 false

需要等待吗?

最佳答案

也许,您可以在Home组件中定义一个变量(isAcceptDone)来确定Button中的异步方法是否完成组件。

Home 组件

async handleDialogAccept() {
try {
const response = await this.$axios.get('https://jsonplaceholder.typicode.com/todos/');
console.log(response.data);
this.isAcceptDone = true;
} catch (err) {
console.log(err);
}
},

Dialog 组件

<dialog-confirmation
@accept="handleDialogAccept()"
:isAcceptDone="isAcceptDone"
/>

Button 组件

<script>
export default {
props: ['parentFunction', 'isAcceptDone'],
data() {
return {
loading: false,
};
},
watch: {
isAcceptDone(val) {
if(val) {
this.loading = false
}
}
},
methods: {
handleClick() {
this.$emit('accept');
},
}
};
</script>

另一方面,如果您认为在三个组件中传递 isAcceptDone 太复杂。使用EventBus是另一种简单的方法。

关于javascript - 等待祖 parent 组件的方法在孙子组件中得到解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56590288/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com