Vue v-show 指令

实例

根据 'showDiv' 的值,使用 v-show 指令有条件地切换 <div> 元素的可见性。

  1. <div v-show="showDiv">This div tag can be hidden</div>

定义与用法

v-show 指令用于有条件地切换元素的可见性。

v-show 使用的表达式计算结果为 'false' 时,CSS 的 display 属性设置为 'none',否则 CSS display 属性将返回默认值。

带有 v-show 的元素被挂载一次并保留在 DOM 中,只有它的可见性通过 v-show 进行切换。

当与内置的 <transition> 组件一起使用时,v-show 会触发转换类和事件。

当使用 v-show 切换对象的可见性时,不会触发生命周期挂钩(如 mounted/unmountedactivated/deactivated)。


v-show vs. v-if

v-showv-if 指令显然非常相似,因为它们都可以切换元素以使其显示或不显示,但有一些区别:

v-showv-if
在切换 DOM 时创建并销毁该元素?
触发元素切换时 mounted/unmounted 的生命周期挂钩?
当与内置的 <transition> 组件一起使用时,触发用于离开和进入的转换事件和类?
是否使用内置的 <template> 元素?
适用于 v-else-if 和 v-else?

更多实例

实例

v-showv-if 指令并行使用,以有条件地切换 <div> 元素的可见性。

打开实例,将条件设置为 'false',然后右键单击并检查页面,以查看带有 v-show 的元素是否仍存在于 DOM 中。

  1. <div id="app">
  2. <div v-show="showDiv">Div tag with v-show</div>
  3. <div v-if="showDiv">Div tag with v-if</div>
  4. </div>
  5. <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
  6. <script>
  7. const app = Vue.createApp({
  8. data() {
  9. return {
  10. showDiv: true
  11. }
  12. }
  13. })
  14. app.mount('#app')
  15. </script>
实例

一个 <p> 元素在 v-show 中变得可见,并触发 after-enter 事件。

  1. <template>
  2. <h1>JavaScript Transition Hooks</h1>
  3. <p>This code hooks into "after-enter" so that after the initial animation is done, a method runs that displays a red div.</p>
  4. <button @click="pVisible=true">Create p-tag!</button><br>
  5. <Transition @after-enter="onAfterEnter">
  6. <p v-show="pVisible" id="p1">Hello World!</p>
  7. </Transition>
  8. <br>
  9. <div v-show="divVisible">This appears after the "enter-active" phase of the transition.</div>
  10. </template>
  11. <script>
  12. export default {
  13. data() {
  14. return {
  15. pVisible: false,
  16. divVisible: false
  17. }
  18. },
  19. methods: {
  20. onAfterEnter() {
  21. this.divVisible = true;
  22. }
  23. }
  24. }
  25. </script>
  26. <style scoped>
  27. .v-enter-active {
  28. animation: swirlAdded 1s;
  29. }
  30. @keyframes swirlAdded {
  31. from {
  32. opacity: 0;
  33. rotate: 0;
  34. scale: 0.1;
  35. }
  36. to {
  37. opacity: 1;
  38. rotate: 360deg;
  39. scale: 1;
  40. }
  41. }
  42. #p1, div {
  43. display: inline-block;
  44. padding: 10px;
  45. border: dashed black 1px;
  46. }
  47. #p1 {
  48. background-color: lightgreen;
  49. }
  50. div {
  51. background-color: lightcoral;
  52. }
  53. </style>

分类导航