Toggle Visibility in Vue
Oct 5, 2022
To conditionally display content on your Vue applications, you can use the v-show directive.
The v-show directive toggles the display css property of the element.
const app = Vue.createApp({
data: () => ({ display: true }),
methods: {
toggleText() {
this.display = !this.display;
}
},
template: `
<div>
<h1 v-show="display">Hello!</h1>
<button @click="toggleText()">Toggle</button>
</div>
`
}).mount('#content');
Using v-bind:class
The v-show directive works well for most cases.
But if you want more fine-grained control over the CSS of how the element is hidden, like hiding the element using height: 0px; or opacity: 0;, you can use v-bind:class to conditionally add a class to your element.
.hide {
display: none;
}
const example = Vue.createApp({
data: () => ({ hide: true }),
methods: {
toggleText() {
this.hide = !this.hide;
}
},
template: `
<div>
<h1 v-bind:class="{hide:hide}">Hello!</h1>
<button @click="toggleText()">Toggle</button>
</div>
`
}).mount('#example');
Using v-if
The v-if directive is similar to v-show.
The major difference is that v-if unmounts the element from the DOM, while v-show simply hides it.
const example1 = Vue.createApp({
data: () => ({ display: true }),
methods: {
toggleText() {
this.display = !this.display;
}
},
template: `
<div>
<h1 v-if="display">Hello!</h1>
<button @click="toggleText()">Toggle</button>
</div>
`
}).mount('#example1');
Keep in mind that v-if will fire the Vue mounted hooks of any component underneath the v-if when the v-if expression changes from false to true.
Vue School has some of our favorite Vue
video courses. Their Vue.js Master Class walks you through building a real
world application, and does a great job of teaching you how to integrate Vue
with Firebase.
Check it out!
Did you find this tutorial useful? Say thanks by starring our repo on GitHub!