Так что я относительно новичок в изучении Vue.js. Я до сих пор понял большую часть этого, но у меня все еще есть проблемы с v-if никогда не работает. Например...
Я ожидал, что они не будут отображаться, потому что showProgress имеет значение 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>
Вы можете встроить шаблон в свой компонент: { template: '<div>Hello</div>', ... }без всяких<template>-tags. Поэтому я думаю, что теги существуют в основном по двум причинам: чтобы помочь синтаксическому анализатору легко найти начало и конец вашего шаблона. и помочь вашей IDE с подсветкой синтаксиса. Вы можете использовать <template lang = "jade">, когда используете другие вещи, кроме html, но это (возможно?) Также единственный пригодный для использования атрибут в теге шаблона.
Связанный: stackoverflow.com/q/47459404/104380



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


v-if должен быть на крайнем div, а не 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>
Без v-else в шаблоне он не знает, что отображать, когда ложно.
Спасибо большое! Ты спас мне день! Потому что в документации сказано, что можно использовать template + v-if, что неверно ...
условный ifможетиспользоваться в шаблоне
@vsync Я думаю, что суть вопроса (и причина, по которой я попал сюда намного позже) заключается в том, что в документах говорится, что это поддерживается, но не работает ... в моем случае даже с v-else в отдельном шаблоне как Документы показывают. Что не ясно из документации, так это то, что он работает, если используется в тегах шаблона, которые не являются самым внешним шаблоном.
Теги
templateособенные, но они будут работать со всем остальным!