반응형
Vue.js: 자 컴포넌트 상태에 따라 부모 컴포넌트 버튼 비활성화
나는 부모와 자녀의 의사소통에 관한 문서를 읽었다.자녀가 이벤트를 발생시킴으로써 부모에게 소통하고 부모 구성요소가 자녀 구성요소로 소품을 물려주는 것을 이해합니다.
이 원칙을 프로젝트에 적용하는 데 어려움을 겪고 있습니다.
나는 가지고 있다Survey
여러 페이지를 포함하는 구성 요소.vSwipe를 사용하여 페이지 슬라이더를 구현하고 있습니다(각각 https://github.com/wangdahoo/vswipe)).<swipe-item>
를 포함합니다.QuestionGroup
여러 개의 컴포넌트를 포함하는 컴포넌트Questions
.
이러한 질문 중 일부는 필수입니다.
vSwipe 다음 버튼과 이전 버튼(부모에 포함)을 비활성화/활성화하려면 어떻게 해야 합니까?Survey
컴포넌트)의 상태를 기반으로 합니다.questions
현재 표시된 대로QuestionGroup
컴포넌트?
조금 아플 수도 있어요.좀 더 우아한 패턴을 위해 VueX를 사용하는 것이 좋습니다.
그나저나, 당신은 질문에서 모든 것을 말했습니다.이벤트를 사용하여 자녀 간에 커뮤니케이션할 수 있습니다.
한 가지 방법은 다음과 같습니다.
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>
언급URL : https://stackoverflow.com/questions/44526817/vue-js-disabling-a-button-on-parent-component-based-on-state-of-child-component
반응형
'programing' 카테고리의 다른 글
이렇게 하면 메모리를 해방시킬 수 있을까요? (0) | 2022.07.28 |
---|---|
정규 표현을 사용한 Java 값 추출 (0) | 2022.07.28 |
문자열 배열을 ArrayList로 변환 (0) | 2022.07.26 |
사용 시기: Java 8+ 인터페이스 기본 방식과 추상 방식 비교 (0) | 2022.07.26 |
posix_memalign/memalign의 기능 (0) | 2022.07.26 |