Menu
×
   ❮   
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

Vue v-if 指令


示例

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

<div v-if="createImgDiv">
  <img src="/img_apple.svg" alt="apple">
  <p>This is an apple.</p>
</div>
运行示例 »

查看下面的更多示例。


定义和用法

v-if 指令用于有条件地渲染元素。

v-if 用于元素时,它后面必须紧跟一个表达式

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

当元素使用 v-if 切换时

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

注意:不建议在同一个标签上使用 v-ifv-for。如果在同一个标签上同时使用这两个指令,v-if 将无法访问 v-for 使用的变量,因为 v-if 的优先级高于 v-for


用于条件渲染的指令

本概述描述了如何将用于条件渲染的不同 Vue 指令一起使用。

指令 详情
v-if 可以单独使用,也可以与 v-else-if 和/或 v-else 一起使用。如果 v-if 内部的条件为 'true',则不考虑 v-else-ifv-else
v-else-if 必须在 v-if 或另一个 v-else-if 之后使用。如果 v-else-if 内部的条件为 'true',则不考虑其后出现的 v-else-ifv-else
v-else 如果 if 语句的第一部分为假,则将执行此部分。必须放在 if 语句的最后,在 v-ifv-else-if 之后。

更多示例

示例 1

使用 v-if 与数据属性作为条件表达式,以及 v-else

<p v-if="typewritersInStock">
  有货
</p>

<p v-else>
  缺货
</p>
自己试试 »

示例 2

使用 v-if 与比较检查作为条件表达式,以及 v-else

<p v-if="typewriterCount > 0">
  有货
</p>

<p v-else>
  缺货
</p>
自己试试 »

示例 3

使用 v-ifv-else-ifv-else 一起使用,根据存储中的打字机数量显示状态消息。

<p v-if="typewriterCount>3">
  有货
</p>

<p v-else-if="typewriterCount>0">
  仅剩少量!
</p>

<p v-else>
  缺货
</p>
自己试试 »

示例 4

使用 v-if 与原生 JavaScript 方法作为条件表达式,以及 v-else

<div id="app">
  <p v-if="text.includes('pizza')">文本包含单词 'pizza' </p>
  <p v-else>文本中未找到单词 'pizza' </p>
</div>
data() {
  return {
    text: '我喜欢 taco、pizza、泰式牛肉沙拉、河粉汤和塔吉锅。'
  }
}
自己试试 »

示例 5

使用 v-if 在从 API 接收数据时渲染 <div> 标签。

<template>
  <h1>Example</h1>
  <p>Click the button to fetch data with an HTTP request.</p>
  <p>Each click generates an object with a random user from <a href="https://random-data-api.com/" target="_blank">https://random-data-api.com/</a>.</p>
  <p>The robot avatars are lovingly delivered by <a href="http://Robohash.org" target="_blank">RoboHash</a>.</p>
  <button @click="fetchData">Fetch data</button>
  <div v-if="data" id="dataDiv">
    <img :src="data.avatar" alt="avatar">
    <pre>{{ data.first_name + " " + data.last_name }}</pre>
    <p>"{{ data.employment.title }}"</p>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        data: null,
      };
    },
    methods: {
      async fetchData() {      
        const response = await fetch("https://random-data-api.com/api/v2/users"); 
        this.data = await response.json();
      },    
    }
  };
</script>

<style>
#dataDiv {
  width: 240px;
  background-color: aquamarine;
  border: solid black 1px;
  margin-top: 10px;
  padding: 10px;
}
#dataDiv > img {
  width: 100%;
}
pre {
  font-size: larger;
  font-weight: bold;
}
</style>
运行示例 »

示例 6

使用 v-if 创建组件,以便触发 mounted 生命周期钩子。

CompOne.vue:

<template>
    <h2>Component</h2>
    <p>Right after this component is added to the DOM, the mounted() function is called and we can add code to that mounted() function. In this example, an alert popup box appears after this component is mounted.</p>
    <p><strong>Note:</strong> The reason that the alert is visible before the component is visible is because the alert is called before the browser gets to render the component to the screen.</p>
  </template>
  
  <script>
  export default {
    mounted() {
      alert("The component is mounted!");
    }
  }
  </script>

App.vue:

<template>
  <h1>The 'mounted' Lifecycle Hook</h1>
  <button @click="this.activeComp = !this.activeComp">Create component</button>
  <div>
    <comp-one v-if="activeComp"></comp-one>
  </div>
</template>

<script>
export default {
  data() {
    return {
      activeComp: false
    }
  }
}
</script>

<style scoped>
  div {
    border: dashed black 1px;
    border-radius: 10px;
    padding: 20px;
    margin: 10px;
    width: 400px;
    background-color: lightgreen;
  }
</style>
运行示例 »

示例 7

使用 v-if 切换 <p> 元素,以便触发动画。

<template>
  <h1>Add/Remove <p> Tag</h1>
  <button @click="this.exists = !this.exists">{{btnText}}</button><br>
  <Transition>
    <p v-if="exists">Hello World!</p>
  </Transition>
</template>

<script>
export default {
  data() {
    return {
      exists: false
    }
  },
  computed: {
    btnText() {
      if(this.exists) {
        return 'Remove';
      }
      else {
        return 'Add';
      }
    }
  }
}
</script>

<style scoped>
  .v-enter-from {
    opacity: 0;
    translate: -100px 0;
  }
  .v-enter-to {
    opacity: 1;
    translate: 0 0;
  }
  .v-leave-from {
    opacity: 1;
    translate: 0 0;
  }
  .v-leave-to {
    opacity: 0;
    translate: 100px 0;
  }
  p {
    background-color: lightgreen;
    display: inline-block;
    padding: 10px;
    transition: all 0.5s;
  }
</style>
运行示例 »

相关页面

Vue 教程:Vue v-if 指令

Vue 参考:Vue v-else-if 指令

Vue 参考:Vue v-else 指令

Vue 教程:Vue 动画

Vue 教程:Vue 生命周期钩子


×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
[email protected]

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
[email protected]

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Copyright 1999-2024 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.