gpt4 book ai didi

javascript - Vue.js:根据子组件的状态禁用父组件上的按钮

转载 作者:行者123 更新时间:2023-12-01 16:19:32 28 4
gpt4 key购买 nike

我已阅读有关亲子沟通的文档。我了解子级通过发出事件与父级进行通信,并且父级组件将 props 传递给子级组件。

我正在努力将这个原则应用到我的项目中:

我有一个 Survey包含多个页面的组件。我正在使用 vswipe 为页面实现 slider (https://github.com/wangdahoo/vswipe)每个<swipe-item>包含 QuestionGroup组件又包含多个 Questions .

其中一些问题是必需的。

如何根据 Survey 的状态禁用/启用 vswipe 下一个和上一个按钮(包含在父 questions 组件中)在当前显示的QuestionGroup组件?

最佳答案

可能有点痛。您可以考虑使用 VueX以获得更优雅的图案。

顺便说一句,你在问题中说了一切。只需使用事件在 child 与 parent 之间进行交流。

这是一种方法:

Vue.component('Question', {
template: `<div>
{{ name }}:
<input type="text"
@input="toogleFilled($event.target.value)">
</input>
</div>`,
props: ['name'],
methods: {
toogleFilled(inputValue) {
// Emit name of the component and true if input is filled...
this.$emit('filled', this.name, !!inputValue.length);
}
}
});

Vue.component('QuestionGroup', {
template: `<div>
<template v-for="(q, key) in questions">
<question :name="key" @filled="toogleReady">
</question>
</template>
</div>`,
data() {
return {
// Each key will be the name of the question
// Each value will be if it's filled or not
questions: {
'Question1': false,
'Question2': false
}
};
},
methods: {
toogleReady(name, filled) {
this.questions[name] = filled;

// Check if each question is filled, if yes, emit true
if (filled && Object.values(this.questions).every(q => q)) {
this.$emit('readyToSwipe', true);
} else {
this.$emit('readyToSwipe', false);
}
}
}
});

Vue.component('Survey', {
template: `<div>
<button :disabled="isDisabled">I'm doing nothing</button>
<question-group @readyToSwipe="toogleDisabled"></question-group>
</div>`,
data() {
return {
isDisabled: true
};
},
methods: {
toogleDisabled(ready) {
// Disable the button if the question-group is not ready
this.isDisabled = !ready;
}
}
});

new Vue({
el: '#app'
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.3.4/vue.js"></script>

<div id="app">
<survey></survey>
</div>

关于javascript - Vue.js:根据子组件的状态禁用父组件上的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44526817/

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