搜尋
首頁web前端前端問答vue條件渲染包含什麼
vue條件渲染包含什麼Dec 26, 2022 pm 06:30 PM
vue條件渲染

vue條件渲染指令包含v-if、v-else、v-else-if、v-show。 v-if指令用於條件性地渲染一塊內容,這塊內容只會在指令的表達式返回真值時才被渲染;v-else可以為v-if添加一個“else 區塊”,v-else -if可以為v-if增加一個「else if 區塊」。 v-show根據一個條件決定是否顯示元素或元件,依賴控制display屬性。

vue條件渲染包含什麼

本教學操作環境:windows7系統、vue3版,DELL G3電腦。

條件渲染

  • 在某些情況下,我們需要根據目前的條件決定某些元素或元件是否渲染,這時候我們就需要進行條件判斷了。
  • Vue提供了下面的指令來進行條件判斷:
    • v-if
    • #v-else
    • v-else-if
    • v-show

下面我們來學習它們。

v-if、v-else、v-else-if

  • #v-if、v-else、v-else-if用來根據條件來渲染某一塊的內容:

    • 這些內容只有在條件為true時,才會被渲染出來;
    • 這三個指令與JavaScript的條件語句if、else、else if類似;

      v-if 指令用於條件性地渲染一塊內容,這塊內容只會在指令的表達式返回真值時才被渲染。

      v-else 可以為 v-if 增加一個「else 區塊」。

      v-else-if 提供的是對應於 v-if 的「else if 區塊」。它可以連續多次重複使用。

vue條件渲染包含什麼

  • #v-if的渲染原理:

    • v -if是惰性的;
    • 當條件為false時,其判斷的內容完全不會被渲染或會被銷毀掉;
    • 當條件為true時,才會真正渲染條件區塊中的內容;

template元素

  • 因為v-if是指令,所以必須將其加入到一個元素上:
    • 但是如果我們希望切換的是多個元素呢?
    • 此時我們渲染div,但是我們並不希望div這種元素被渲染;
    • 這個時候,我們可以選擇使用template;
  • template元素可以當做不可見的包裹元素,並且在v-if上使用,但是最終template不會被渲染出來:

    • 有點類似於小程式中的block

下面來透過範例好好了解v-if、v-else、v-else-if三個指令。

v-if

前面說到過v-if根據表達式來的值來判斷在DOM中生成元素。例如:

<!-- template -->
<div>
    <h1 id="v-if的值为true时-显示这个div元素">v-if的值为true时,显示这个div元素</h1>
</div>

// JavaScript
var app = new Vue({
    el: '#app',
    data: {

    }
})

這個時候<h1></h1>元素插入到div#app元素中,並且渲染出來:

在Vue中,如果你需要讓某個元素是否渲染,那就在該元素上加上v-if指令,並且設定其值為truefalse。例如上面的範例,我們設定的是true,元素被渲染。如果把上面的true值換成false<h1></h1>元素就不會渲染。

除了直接給v-if設定truefalse之外,還可以透過表達式來做判斷。例如:

<!-- template -->
<div>
    <h1>
    v-if的值为true时,显示这个div元素
    </h1>
</div>
// JavaScript
    var app = new Vue({
    el: '#app',
    data: { isShow: true }
})

上面的範例中,宣告了isShow的值為true,然後在h1元素中,透過 v-if指令綁定isShow。其實類似v-if="true"h1元素也正常渲染:

#當你把isShow設定為false時,h1元素又不會渲染。

上面我們看到的是渲染一個元素,如果要渲染多個元素,那是不是直接裡面嵌套多個元素呢?讓我們來驗證一下自己的想法:

<!-- template -->
<div>
    <div>
        <h1 id="我是标题">我是标题</h1>
        <p>我是段落</p>
    </div>
</div>

和我們想像的一樣。但在Vue中,我們切換多個元素一般不這麼使用,而是配合<template></template>元素當做包裝元素,並在上面使用v-if。最終的渲染結果不會包含<template></template>元素。如下圖所示:

<template>
    <h1 id="标题">标题</h1>
    <p>段落 1</p>
    <p>段落 2</p>
</template>

v-else

v-else和JavaScript中的else类似,但其要和v-if配合使用。比如我们做登录,如果登录了显示一个欢迎语,反则提示用户去登录。那么我们可以设置一个isLogined表达式,比如:

<!-- Template -->
<div>
    <h1 id="欢迎来到W-cplus">欢迎来到W3cplus!(^_^)</h1>
    <h1 id="请先登录-再来">请先登录,再来!(^_^)</h1>
</div>

// JavaScript
var app = new Vue({
    el: '#app',
    data: {
        isLogined: true
    }
})

如你所想,你在浏览器能看到下图的效果:

isLogined的值换成false,那么渲染出来的内容就变了:

在实际项目中,当我们一个组件在两种状态渲染的效果不一样的时候,这个时候使用v-ifv-else配合<template></template>就很好实现了。比如中奖和未中奖:

<template>
    <figure>
        <figcaption>恭喜你中了5元红包</figcaption>
        <img  src="/static/imghwm/default1.png" data-src="xxx" class="lazy" alt="vue條件渲染包含什麼" >
    </figure>
</template>

<template>
    <figure>
        <figcaption>亲,就差那么一点点</figcaption>
        <img  src="/static/imghwm/default1.png" data-src="xxx" class="lazy" alt="vue條件渲染包含什麼" >
    </figure>
</template>

v-else-if

v-else-if和JavaScript中的else if类似,需要和v-if配合在一起使用。当有几个条件同时在的时候,根据运算结果决定显示与否。如下面的代码,根据type的值决定显示哪一个区块。比如,我们的例子,设定的type的值B,那么就会显示区块B

<!-- template -->
<div>
    <div>显示A区域</div>
    <div>显示B区域</div>
    <div>显示C区域</div>
</div>

// JavaScript
var app = new Vue({
    el: '#app',
    data: {
        type: "B"
    }
})

如果修改type的值,将显示的区域会不一样:

v-show

  • v-show和v-if的用法看起来是一致的,也是根据一个条件决定是否显示元素或者组件:

vue條件渲染包含什麼

v-showv-if功能有点相似,其中v-if依赖于控制DOM节点,而v-show是依赖于控制DOM节点的display属性。当v-show传入的值为true时,对应DOM元素的display的值为block之类的,反之为false时,display的值为none。也就是用户看不到元素的显示,但其DOM元素还是存在的。

<!-- Template -->
<div>
    <h1 id="我是一个标题">我是一个标题</h1>
    <p>我是一个段落</p>
</div>

// JavaScript
var app = new Vue({
    el: '#app',
    data: {
        isShow: false
    }
})

在浏览器看到的效果将是这样的:

注意v-show 不支持 <template></template> 语法,也不支持 v-else

v-show和v-if的区别

  • 首先,在用法上的区别:
    • v-show是不支持template;
    • v-show不可以和v-else一起使用;
  • 其次,本质的区别:
    • v-show元素无论是否需要显示到浏览器上,它的DOM实际都是有存在的,只是通过CSS的display属性来进行切换;
    • v-if当条件为false时,其对应的原生压根不会被渲染到DOM中;
  • 开发中如何进行选择呢?
    • 如果我们的原生需要在显示和隐藏之间频繁的切换,那么使用v-show;
    • 如果不会频繁的发生切换,那么使用v-if;

【相关推荐:vuejs视频教程web前端开发

以上是vue條件渲染包含什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
Vue常见面试题汇总(附答案解析)Vue常见面试题汇总(附答案解析)Apr 08, 2021 pm 07:54 PM

本篇文章给大家分享一些Vue面试题(附答案解析)。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

5 款适合国内使用的 Vue 移动端 UI 组件库5 款适合国内使用的 Vue 移动端 UI 组件库May 05, 2022 pm 09:11 PM

本篇文章给大家分享5 款适合国内使用的 Vue 移动端 UI 组件库,希望对大家有所帮助!

聊聊vue指令中的修饰符,常用事件修饰符总结聊聊vue指令中的修饰符,常用事件修饰符总结May 09, 2022 am 11:07 AM

本篇文章带大家聊聊vue指令中的修饰符,对比一下vue中的指令修饰符和dom事件中的event对象,介绍一下常用的事件修饰符,希望对大家有所帮助!

如何覆盖组件库样式?React和Vue项目的解决方法浅析如何覆盖组件库样式?React和Vue项目的解决方法浅析May 16, 2022 am 11:15 AM

如何覆盖组件库样式?下面本篇文章给大家介绍一下React和Vue项目中优雅地覆盖组件库样式的方法,希望对大家有所帮助!

通过9个Vue3 组件库,看看聊前端的流行趋势!通过9个Vue3 组件库,看看聊前端的流行趋势!May 07, 2022 am 11:31 AM

本篇文章给大家分享9个开源的 Vue3 组件库,通过它们聊聊发现的前端的流行趋势,希望对大家有所帮助!

react与vue的虚拟dom有什么区别react与vue的虚拟dom有什么区别Apr 22, 2022 am 11:11 AM

react与vue的虚拟dom没有区别;react和vue的虚拟dom都是用js对象来模拟真实DOM,用虚拟DOM的diff来最小化更新真实DOM,可以减小不必要的性能损耗,按颗粒度分为不同的类型比较同层级dom节点,进行增、删、移的操作。

VSCode插件分享:一个实时预览Vue/React组件的插件VSCode插件分享:一个实时预览Vue/React组件的插件Mar 17, 2022 pm 08:07 PM

在VSCode中开发Vue/React组件时,怎么实时预览组件?本篇文章就给大家分享一个VSCode 中实时预览Vue/React组件的插件,希望对大家有所帮助!

手把手带你使用Vue + Laravel开发一个简单的 CRUD 应用手把手带你使用Vue + Laravel开发一个简单的 CRUD 应用Apr 15, 2022 pm 08:55 PM

本篇文章给大家分享一个Vue+Laravel开发教程,介绍一下怎么使用 Vue.js 和 Laravel 共建一个简单的 CRUD 应用,希望对大家有所帮助!

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
1 個月前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器