【发布时间】:2018-06-13 11:19:44
【问题描述】:
如果计算属性的有效属性为假,我有一个按钮被设置为禁用。如果为 true,则应启用该按钮并允许用户移动到当前流程中的下一步。
我的 currentStep 计算属性会根据当前步骤输入的更改完美更新,但按钮 :disabled="currentStep.valid" 无法识别正在发生的 currentStep.valid 更改。
如果我点击 vue-devtools 中的当前组件(addnewprogram)来查看它的数据,按钮会正确显示!
在这里看到:http://recordit.co/XH6HX7JLhV
但是,如果不点击 devtools 中的 addnewprogram,它就不能正常工作。
是否有我遗漏的观察警告?
此功能的代码可以在这里找到:
<template>
<section class="newprogram">
<div class="newprogram--content">
<div class="newprogram--stepone" v-if="progression.current === 1">
<div class="content--left">
<a class="link uppercase">use existing program information<i class="fa fa-picture-o"></i></a>
<base-input v-for="input in currentStep.inputs"
:key="input.id"
:data="input"
v-model="input.value"></base-input>
</div>
<div class="content--right">
<!-- images -->
</div>
</div>
<div class="newprogram--steptwo" v-if="progression.current === 2">
<choice-progression :step="1"></choice-progression>
</div>
</div>
</div>
<!-- Consistent among all steps -->
<div class="container--bottomnav">
<div class="bottomnav--left">
<base-btn class="button-fluid"
:data="currentStep.btns[0]"></base-btn>
</div>
<div class="bottomnav--right">
<base-btn :data="currentStep.btns[1]"
:disabled="currentStepValid"></base-btn>
</div>
</div>
<!-- -->
</section>
</template>
<script>
import bottomNav from '../main/bottom-nav.vue';
import baseProgressionBarbell from '../base/base-progression-barbell.vue';
import baseInstruction from '../base/base-instruction.vue';
import baseInput from '../base/base-input.vue';
import baseBtn from '../base/base-btn.vue';
import choiceProgression from '../secondary-flows/choice-progression.vue';
export default {
name: 'addNewProgram',
components: {
bottomNav,
baseProgressionBarbell,
baseInstruction,
baseInput,
baseBtn,
choiceProgression
},
computed: {
progression () {
return this.$store.getters.getProgression('addnewprogram');
},
steps () {
return this.$store.getters.getSteps('addnewprogram');
},
currentStep () {
return this.steps[this.progression.current - 1];
},
currentStepValid () {
return this.currentStep.valid == false ? true : false;
},
stepOneValidation () {
this.steps[0].inputs.forEach(input => {
if (!input.value) {
return this.$set(this.steps[0], 'valid', false);
}
this.$set(this.steps[0], 'valid', true);
});
},
stepTwoChoices() {
return this.$store.getters.getChoices('addnewprogram', 1);
}
}
}
</script>
<style lang="sass" scoped>
@import '../../sass/_variables.sass'
.newprogram
display: flex
flex-direction: column
.container--newprogram
display: flex
flex-direction: column
height: 100%
padding: $s1
.newprogram--header
display: flex
justify-content: space-between
align-items: center
h1
padding: 0
.newprogram--content
display: flex
// justify-content: center
// align-items: center
height: 100%
padding-top: $s2
</style>
【问题讨论】:
-
请使用 StackOverflow 的代码 sn-ps 将代码直接放入您的问题中。链接可能会中断,从而导致代码从问题中丢失,并丢失您遇到的问题的有价值的上下文。
-
由于你的项目有很多代码和很多文件,但是,尽量隔离问题,只包含相关代码sn-ps,也许考虑折叠除
add-new-program.vue默认文件。 -
@B.Fleming 已修复
-
您能创建一个有效的 sn-p/fiddle 问题吗?我尝试使用您的代码,但要模拟的数据太多。
-
@yuriy636 这就是我没有创建小提琴的原因