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-if
和v-show
来控制元素或模板的渲染。而v-if
和v-show
也属于Vue的内部常用的指令。这里所说的指令就是directive
,指特殊的带有前缀v-
的命令,指令的值限定为绑定表达式,指令的职责是当表达式的值改变时把某些特殊的行为应用到DOM上。
v-if
和v-show
两个指令就是大家常说的条件渲染指令。(学习视频分享:vue视频教程)
咱们先来看v-if
指令。其作用就是根据表达式的值true
或false
在DOM中生成或者移除一个元素(或多个元素)。有点类似JavaScript中的if
条件判断。在Vue中除了v-if
也有v-else-if
和v-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
指令,并且设置其值为true
或false
。比如上面的示例,我们设置的是true
,元素被渲染。如果把上面的true
值换成false
,<h1>
元素就不会渲染。
除了直接给v-if
设置true
或false
之外,还可以通过表达式来做判断。比如:
<!-- 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
和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-if
和v-else
配合<template>
就很好实现了。比如中奖和未中奖:
<template v-if='isPrized'> <figure> <figcaption>恭喜你中了5元红包</figcaption> <img src="xxx" /> </figure> </template> <template v-else> <figure> <figcaption>亲,就差那么一点点</figcaption> <img src="xxx" /> </figure> </template>
v-else-if
和JavaScript中的else if
类似,需要和v-if
配合在一起使用。当有几个条件同时在的时候,根据运算结果决定显示与否。如下面的代码,根据type
的值决定显示哪一个区块。比如,我们的例子,设定的type
的值B
,那么就会显示区块B
:
<!-- template --> <div id="app"> <div v-if="type === 'A'">显示A区域</div> <div v-else-if="type === 'B'">显示B区域</div> <div v-else>显示C区域</div> </div> // JavaScript var app = new Vue({ el: '#app', data: { type: "B" } })
如果修改type
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
-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
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 } })
<h1>
in das Element div#app
eingefügt und wie folgt gerendert: 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: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: 🎜rrreeev-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-show
和v-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
}
})
Nach dem Login kopierenNach dem Login kopieren
在浏览器看到的效果将是这样的:
注意,v-show
不支持 <template>
语法,也不支持 v-else
。
v-if Vs. v-show
v-if
和v-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-if
和v-show
。这两个都是Vue的内部指令,而且都是用来控制元素的渲染。只不过,v-if
判断是否加载,可以减轻服务器的压力,在需要时加载;v-show
调整DOM元素的CSS的dispaly
属性,可以使客户端操作更加流畅。虽然这两都都能很好的控制元素的渲染,但实际使用的时候,更应该根据自己的场景来判断使用哪一个指令。
原文地址::https://www.w3cplus.com/vue/v-if-vs-v-show.html
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!