Vue v-else-if 指令

实例

如果条件为 'true',则使用 v-else-if 指令创建 <div> 元素。

  1. <div v-if="word === 'apple'">
  2. <img src="/img_apple.svg" alt="apple" />
  3. <p>The value of the 'word' property is 'apple'.</p>
  4. </div>
  5. <div v-else-if="word === 'pizza'">
  6. <img src="/img_pizza.svg" alt="pizza" />
  7. <p>The value of the 'word' property is 'pizza'</p>
  8. </div>

定义与用法

v-else-if 指令用于有条件地呈现元素。v-else-if 指令只能在带有 v-if 的元素之后使用,或在带有 v-else-if 的另一个元素之后使用。在元素上使用 v-else-if 时,它后面必须跟一个表达式:

  • 如果表达式的计算结果为 'true',则在 DOM 中创建元素及其所有内容。
  • 如果表达式的计算结果为 'false',则元素将被销毁。

使用 v-else-if 切换元素时:

  • 当元素进入和离开 DOM 时,我们可以使用内置的 <Transition> 组件来设置动画。
  • 会触发生命周期钩子,如 'mounted' 和 'unmounted'。

条件呈现指令

此概述描述了用于条件呈现的不同 Vue 指令是如何一起使用的。

指令详情
v-if可以单独使用,也可以与 v-else-if ,或 v-else 一起使用。如果 v-If 内部的条件为 true,则不考虑 v-else-If 或 v-else。
v-else-if必须在 v-if 或另一个 v-else-if 之后使用。如果 v-else-If 内部的条件为 true,则不考虑后面的 v-else-If 或 v-else。
v-else如果 if 语句的第一部分为 false,则会发生此部分必须放在 if 语句的最后,在 v-if 和 v-else-if 之后。

更多实例

实例 1

使用 v-else-if 写上 "Very few left!"(所剩无几!)以防库存中只剩下1、2或3台打字机。

  1. <p v-if="typewriterCount>3">
  2. In stock
  3. </p>
  4. <p v-else-if="typewriterCount>0">
  5. Very few left!
  6. </p>
  7. <p v-else>
  8. Not in stock
  9. </p>
实例 2

如果句子中包含 'burrito',则使用 v-else-if 来显示特定的文本和图像。

  1. <div id="app">
  2. <div v-if="text.includes('pizza')">
  3. <p>The text includes the word 'pizza'</p>
  4. <img src="img_pizza.svg">
  5. </div>
  6. <div v-else-if="text.includes('burrito')">
  7. <p>The text includes the word 'burrito', but not 'pizza'</p>
  8. <img src="img_burrito.svg">
  9. </div>
  10. <p v-else>The words 'pizza' or 'burrito' are not found in the text</p>
  11. </div>
  12. <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
  13. <script>
  14. const app = Vue.createApp({
  15. data() {
  16. return {
  17. text: 'I like taco, pizza, Thai beef salad, pho soup and tagine.'
  18. }
  19. }
  20. })
  21. app.mount('#app')
  22. </script>
实例 3

使用 v-else-if 链来翻转图像,使用 <Transition> 组件来创建动画。

App.vue:

  1. <template>
  2. <h1>mode="out-in"</h1>
  3. <p>Click the button to get a new image.</p>
  4. <p>With mode="out-in", the next image is not added until the current image is removed. Another difference from the previous example, is that here we use computed prop instead of a method.</p>
  5. <button @click="indexNbr++">Next image</button><br>
  6. <Transition mode="out-in">
  7. <img src="/img_pizza.svg" v-if="imgActive === 'pizza'">
  8. <img src="/img_apple.svg" v-else-if="imgActive === 'apple'">
  9. <img src="/img_cake.svg" v-else-if="imgActive === 'cake'">
  10. <img src="/img_fish.svg" v-else-if="imgActive === 'fish'">
  11. <img src="/img_rice.svg" v-else-if="imgActive === 'rice'">
  12. </Transition>
  13. </template>
  14. <script>
  15. export default {
  16. data() {
  17. return {
  18. imgs: ['pizza', 'apple', 'cake', 'fish', 'rice'],
  19. indexNbr: 0
  20. }
  21. },
  22. computed: {
  23. imgActive() {
  24. if(this.indexNbr >= this.imgs.length) {
  25. this.indexNbr = 0;
  26. }
  27. return this.imgs[this.indexNbr];
  28. }
  29. }
  30. }
  31. </script>
  32. <style scoped>
  33. .v-enter-active {
  34. animation: swirlAdded 0.7s;
  35. }
  36. .v-leave-active {
  37. animation: swirlAdded 0.7s reverse;
  38. }
  39. @keyframes swirlAdded {
  40. from {
  41. opacity: 0;
  42. rotate: 0;
  43. scale: 0.1;
  44. }
  45. to {
  46. opacity: 1;
  47. rotate: 360deg;
  48. scale: 1;
  49. }
  50. }
  51. img {
  52. width: 100px;
  53. margin: 20px;
  54. }
  55. img:hover {
  56. cursor: pointer;
  57. }
  58. </style>

分类导航