Heim  >  Artikel  >  Web-Frontend  >  Detaillierte Erläuterung der Vue-Anweisungen für bedingtes Rendering: v-if und v-show

Detaillierte Erläuterung der Vue-Anweisungen für bedingtes Rendering: v-if und v-show

青灯夜游
青灯夜游nach vorne
2022-08-10 17:03:261676Durchsuche

In Vue können wir v-if und v-show verwenden, um das Rendering von Elementen oder Vorlagen zu steuern. Und v-if und v-show sind auch häufig verwendete interne Anweisungen in Vue. Die hier erwähnte Anweisung ist directive, die sich auf einen speziellen Befehl mit dem Präfix v- bezieht. Der Wert der Anweisung ist auf einen verbindlichen Ausdruck beschränkt soll als Ausdruck fungieren, ein spezielles Verhalten auf das DOM anwenden, wenn sich sein Wert ändert. v-ifv-show来控制元素或模板的渲染。而v-ifv-show也属于Vue的内部常用的指令。这里所说的指令就是directive,指特殊的带有前缀v-的命令,指令的值限定为绑定表达式,指令的职责是当表达式的值改变时把某些特殊的行为应用到DOM上。

Detaillierte Erläuterung der Vue-Anweisungen für bedingtes Rendering: v-if und v-show

v-ifv-show两个指令就是大家常说的条件渲染指令。(学习视频分享:vue视频教程

v-if  : 条件分支指令


咱们先来看v-if指令。其作用就是根据表达式的值truefalse在DOM中生成或者移除一个元素(或多个元素)。有点类似JavaScript中的if条件判断。在Vue中除了v-if也有v-else-ifv-else之类。

v-if

前面说到过v-if根据表达式来的值来判断在DOM中生成元素。比如:

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

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

    }
})

这个时候<h1>元素插入到div#app元素中,并渲染出来:

在Vue中,如果你需要让某个元素是否渲染,那就在该元素上添加v-if指令,并且设置其值为truefalse。比如上面的示例,我们设置的是true,元素被渲染。如果把上面的true值换成false<h1>元素就不会渲染。

除了直接给v-if设置truefalse之外,还可以通过表达式来做判断。比如:

<!-- template -->
<div id="app">
    <h1 v-if="isShow">
    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 id="app">
    <div v-if="isShow">
        <h1>我是标题</h1>
        <p>我是段落</p>
    </div>
</div>

和我们想像的一样。但在Vue中,我们切换多个元素一般不这么使用,而是配合<template>元素当做包装元素,并在上面使用v-if。最终的渲染结果不会包含<template>元素。如下所示:

<template v-if="isShow">
    <h1>标题</h1>
    <p>段落 1</p>
    <p>段落 2</p>
</template>

v-else

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

<!-- Template -->
<div id="app">
    <h1 v-if="isLogined">欢迎来到W3cplus!(^_^)</h1>
    <h1 v-else>请先登录,再来!(^_^)</h1>
</div>

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

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

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

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

<template v-if=&#39;isPrized&#39;>
    <figure>
        <figcaption>恭喜你中了5元红包</figcaption>
        <img src="xxx" />
    </figure>
</template>

<template v-else>
    <figure>
        <figcaption>亲,就差那么一点点</figcaption>
        <img src="xxx" />
    </figure>
</template>

v-else-if

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

<!-- template -->
<div id="app">
    <div v-if="type === &#39;A&#39;">显示A区域</div>
    <div v-else-if="type === &#39;B&#39;">显示B区域</div>
    <div v-else>显示C区域</div>
</div>

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

如果修改type

Detaillierte Erläuterung der Vue-Anweisungen für bedingtes Rendering: v-if und v-show

v-if und v Die beiden Anweisungen -show werden allgemein als Anweisungen für bedingtes Rendern bezeichnet. (Teilen von Lernvideos: vue-Video-Tutorial)

v-if: Bedingte Verzweigungsanweisung


🎜Schauen wir uns zuerst die v-if-Anweisung an. Seine Funktion besteht darin, ein Element (oder mehrere Elemente) im DOM basierend auf dem Wert des Ausdrucks true oder false zu generieren oder zu entfernen. Es ähnelt in gewisser Weise der bedingten if-Beurteilung in JavaScript. Zusätzlich zu v-if verfügt Vue auch über v-else-if und v-else.
🎜

v-if

🎜Wie bereits erwähnt, ist v-if der Wert, der auf dem basiert Ausdruck Um zu bestimmen, ob Elemente im DOM generiert werden sollen. Zum Beispiel: 🎜
<!-- Template -->
<div id="app">
    <h1 v-show="true">我是一个标题</h1>
    <p v-show="isShow">我是一个段落</p>
</div>

// JavaScript
var app = new Vue({
    el: '#app',
    data: {
        isShow: false
    }
})
🎜Zu diesem Zeitpunkt wird das Element <h1> in das Element div#app eingefügt und wie folgt gerendert:
🎜🎜🎜🎜Wenn Sie in Vue feststellen müssen, ob ein Element gerendert wird, Fügen Sie dann einfach die v-if-Direktive zu diesem Element hinzu und setzen Sie seinen Wert auf true oder false. Im obigen Beispiel setzen wir beispielsweise true und das Element wird gerendert. Wenn der obige true-Wert durch false ersetzt wird, wird das <h1>-Element nicht gerendert. 🎜🎜Neben der direkten Einstellung von true oder false auf v-if können Sie auch Urteile über Ausdrücke fällen. Zum Beispiel: 🎜rrreee🎜Im obigen Beispiel wird der Wert von isShow als true deklariert und dann im Element h1 übergeben v Die -if-Direktive bindet isShow. Tatsächlich ähnelt es v-if="true". Das h1-Element wird auch normal gerendert:
🎜🎜🎜🎜Wenn Sie isShow auf false setzen, wird das Element h1 nicht gerendert. 🎜🎜🎜🎜Was wir oben sehen, ist das Rendern eines Elements. Wenn Sie mehrere Elemente rendern möchten, sollten Sie dann mehrere Elemente direkt darin verschachteln? Lassen Sie uns unsere Ideen überprüfen: 🎜rrreee🎜🎜🎜 Genau wie wir vorgestellt. Wenn wir jedoch in Vue mehrere Elemente wechseln, verwenden wir diese Methode im Allgemeinen nicht. Stattdessen verwenden wir das Element <template> als Verpackungselement und verwenden v-if drauf. Das endgültige Rendering-Ergebnis enthält nicht das Element <template>. Wie unten gezeigt: 🎜rrreee🎜🎜

v-else

🎜v-else ähnelt else in JavaScript, ähnelt jedoch v-if Code> >Zusammen verwenden. Wenn wir uns beispielsweise anmelden, wird eine Willkommensnachricht angezeigt, andernfalls wird der Benutzer aufgefordert, sich anzumelden. Dann können wir einen <code>isLogined-Ausdruck festlegen, z. B.: 🎜rrreee🎜Wie Sie denken, können Sie den Effekt des folgenden Bildes im Browser sehen: 🎜🎜🎜🎜Ersetzen Sie den Wert von isLogined durch false , dann ändert sich der gerenderte Inhalt: 🎜🎜🎜 🎜In Wirklichkeit Wenn in Projekten eine Komponente in zwei Zuständen unterschiedlich gerendert wird, ist die Verwendung von v-if und v-else in Verbindung mit <template> einfach umzusetzen. Zum Beispiel gewinnen und nicht gewinnen: 🎜rrreee

v-else-if

🎜v-else-if und else if ist ähnlich und muss zusammen mit <code>v-if verwendet werden. Wenn mehrere Bedingungen gleichzeitig vorliegen, wird anhand des Operationsergebnisses bestimmt, ob die Anzeige angezeigt wird oder nicht. Wie im folgenden Code gezeigt, wird basierend auf dem Wert von type bestimmt, welcher Block angezeigt wird. Wenn in unserem Beispiel beispielsweise der Wert von type auf B gesetzt ist, wird der Block B angezeigt: 🎜rrreee🎜If Wenn Sie den Wert von type ändern, wird der angezeigte Bereich anders sein: 🎜🎜🎜🎜

v-show


文章开头提到过,除了v-if之外,Vue还提供v-show也可以控制元素的渲染。v-showv-if功能有点相似,其中v-if依赖于控制DOM节点,而v-show是依赖于控制DOM节点的display属性。当v-show传入的值为true时,对应DOM元素的display的值为block之类的,反之为false时,display的值为none。也就是用户看不到元素的显示,但其DOM元素还是存在的。

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

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

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

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

v-if Vs. v-show


v-ifv-show都能控制DOM元素的显示和隐藏,但是在切换v-if模块时,Vue有一个局部编译/卸载过程,因为v-if中的模板可能包括数据绑定或者子组件,v-if是真是的条件渲染,它会确保条件快在切换时合适的销毁与重建条件块内的时间监听器和子组件。

两者之间的具体区别,官网是这样描述的:

  • v-if 是“真正的”条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁重建
  • v-if 也是惰性的:如果在初始渲染时条件为假,则什么也不做——直到条件第一次变为真时,才会开始渲染条件块。
  • 相比之下,v-show 就简单得多——不管初始条件是什么,元素总是会被渲染,并且只是简单地基于 CSS 进行切换。

一般来说,v-if有更高的切换开销,而 v-show 有更高的初始渲染开销。因此,如果需要非常频繁地切换,则使用 v-show 较好;如果在运行时条件不太可能改变,则使用 v-if 较好

总结


这篇文章主要了解了Vue中的v-ifv-show。这两个都是Vue的内部指令,而且都是用来控制元素的渲染。只不过,v-if判断是否加载,可以减轻服务器的压力,在需要时加载;v-show调整DOM元素的CSS的dispaly属性,可以使客户端操作更加流畅。虽然这两都都能很好的控制元素的渲染,但实际使用的时候,更应该根据自己的场景来判断使用哪一个指令。

原文地址::https://www.w3cplus.com/vue/v-if-vs-v-show.html

(学习视频分享:web前端开发编程基础视频

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Vue-Anweisungen für bedingtes Rendering: v-if und v-show. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen