Friday, May 17, 2024
 Popular · Latest · Hot · Upcoming
103
rated 0 times [  108] [ 5]  / answers: 1 / hits: 20081  / 6 Years ago, sun, june 3, 2018, 12:00:00

So I am relatively new to learning Vue.js. I have gotten to understand most of it so far but I still have trouble with v-if never working. For example...



I would expect these to not show because showProgress is false!



<template v-if=showProgress>
<div id=progressCols class=md-layout>
<div class=md-layout-item :class=[{ activeStep: currentStep(1) }, '.md-elevation-1']></div>
<div class=md-layout-item :class=[{ activeStep: currentStep(2) }, '.md-elevation-1']></div>
<div class=md-layout-item :class=[{ activeStep: currentStep(3) }, '.md-elevation-1']></div>
<div class=md-layout-item :class=[{ activeStep: currentStep(4) }, '.md-elevation-1']></div>
<div class=md-layout-item :class=[{ activeStep: currentStep(5) }, '.md-elevation-1']></div>
{{ showProgress }}
</div>
</template>

<script>
export default {
name: 'ProgressCols',
data: function(){
return {
showProgress: false
}
},
methods: {
currentStep(i){
let n = 0;
if (this.$route.params.name == Ailments) {
n = 1;
} else if (this.$route.params.name == Effects) {
n = 2;
}

i < n ? true : false
}
}
}
</script>

More From » vue.js

 Answers
22

The v-if should be on the outermost div, not template.



<template>
<div id=progressCols class=md-layout v-if=showProgress>
<div class=md-layout-item :class=[{ activeStep: currentStep(1) }, '.md-elevation-1']></div>
<div class=md-layout-item :class=[{ activeStep: currentStep(2) }, '.md-elevation-1']></div>
<div class=md-layout-item :class=[{ activeStep: currentStep(3) }, '.md-elevation-1']></div>
<div class=md-layout-item :class=[{ activeStep: currentStep(4) }, '.md-elevation-1']></div>
<div class=md-layout-item :class=[{ activeStep: currentStep(5) }, '.md-elevation-1']></div>
{{ showProgress }}
</div>
</template>

<script>

export default {
name: 'ProgressCols',
data: function(){
return {
showProgress: false
}
},
methods: {
currentStep(i){
let n = 0;
if (this.$route.params.name == Ailments) {
n = 1;
} else if (this.$route.params.name == Effects) {
n = 2;
}

i < n ? true : false
}
}
}

</script>


Without a v-else on the template, it doesn't know what to render when false.


[#54284] Wednesday, May 30, 2018, 6 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
kiley

Total Points: 733
Total Questions: 118
Total Answers: 94

Location: Liechtenstein
Member since Wed, Dec 8, 2021
2 Years ago
;