Vue.js provides various directives to facilitate dynamic interactions in your web applications. One such directive is v-show, a handy tool for toggling the visibility of elements based on a condition. In this article, we'll explore the syntax, use cases, and examples of the v-show directive in Vue.js.
What is v-show?
The v-show directive is used to control the visibility of an HTML element by toggling the CSS display
property between 'none' and its original value. Unlike v-if, which conditionally renders or destroys elements based on the condition, v-show keeps the element in the DOM but toggles its visibility.
Syntax of v-show
The syntax for using v-show is straightforward. You add the v-show
directive to an HTML element, and its visibility is controlled based on the truthiness of the provided expression.
<div v-show="condition">This div can be hidden</div>
In the above code, the condition
is a boolean value. If it's true
, the div is visible; if it's false
, the div is hidden.
Example 1. Basic Usage of v-show
Let's start with a basic example to illustrate how v-show works. We'll create a Vue app with a div that can be toggled based on a boolean property.
<div id="app">
<div v-show="showDiv">This div can be hidden</div>
<button @click="toggleVisibility">Toggle Visibility</button>
</div>
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
const app = Vue.createApp({
data() {
return {
showDiv: true,
};
},
methods: {
toggleVisibility() {
this.showDiv = !this.showDiv;
},
},
});
app.mount('#app');
</script>
In this example, the showDiv
property determines the visibility of the div. Clicking the "Toggle Visibility" button toggles the value of showDiv
, demonstrating the basic usage of v-show.
Example 2. v-show vs. v-if
It's essential to understand the difference between v-show and v-if. While v-show toggles the visibility by modifying the CSS display
property, v-if conditionally renders or destroys elements based on the condition.
Let's compare v-show and v-if using two different div elements in the same Vue app.
<div id="app">
<div v-show="showDiv">Div with v-show</div>
<div v-if="showDiv">Div with v-if</div>
<button @click="toggleVisibility">Toggle Visibility</button>
</div>
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
const app = Vue.createApp({
data() {
return {
showDiv: true,
};
},
methods: {
toggleVisibility() {
this.showDiv = !this.showDiv;
},
},
});
app.mount('#app');
</script>
In this example, you can observe that v-show keeps the div in the DOM but changes its visibility, while v-if renders or destroys the div based on the condition. Inspecting the page using the browser's developer tools will reveal the differences.
Example 3. Using a Function with v-show
Instead of directly using a boolean property, v-show can also be used with the return value of a function. Let's modify our example to include a function for conditional visibility.
<div id="app">
<div v-show="containsWord('pizza')">Div with v-show</div>
<button @click="toggleVisibility">Toggle Visibility</button>
</div>
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
const app = Vue.createApp({
data() {
return {
text: 'I like taco, pizza, Thai beef salad, pho soup and tagine.',
};
},
methods: {
containsWord(word) {
return this.text.includes(word);
},
toggleVisibility() {
// Functionality to toggle visibility
},
},
});
app.mount('#app');
</script>
In this example, the containsWord
function checks if the text includes the word 'pizza'. If true, the div is visible; otherwise, it's hidden.
Example 4. Toggle Visibility with a Button
Let's enhance our examples by adding a button that allows users to toggle the visibility. This demonstrates a practical use case where v-show can be controlled interactively.
<div id="app">
<div v-show="showDiv">This div can be hidden</div>
<button @click="toggleVisibility">Toggle Visibility</button>
</div>
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
const app = Vue.createApp({
data() {
return {
showDiv: true,
};
},
methods: {
toggleVisibility() {
this.showDiv = !this.showDiv;
},
},
});
app.mount('#app');
</script>
The v-show directive in Vue.js provides a versatile tool for dynamically controlling the visibility of HTML elements within your applications. Unlike v-if, which conditionally renders or destroys elements, v-show toggles the visibility by modifying the CSS display
property. This feature proves valuable in scenarios where you want to keep elements in the DOM while toggling their visibility, leading to potential performance benefits. Throughout this article, we explored the syntax and basic usage of v-show with simple examples. We compared v-show with v-if to highlight their distinctions in handling element visibility. Additionally, we demonstrated the use of functions to conditionally show elements based on dynamic data, showcasing the flexibility of v-show.
Whether building interactive user interfaces or responding to user actions, integrating v-show into your Vue.js projects enables a seamless and efficient approach to managing element visibility. By understanding the strengths and use cases of v-show, developers can create more responsive and engaging web applications. As you explore the capabilities of Vue.js directives, consider incorporating v-show when aiming for a balance between dynamic visibility and optimal DOM performance.