151.md 4.3 KB
Newer Older
W
wizardforcel 已提交
1
# 7 条件渲染第 1 部分(`v-if`,`v-else`,`v-else-if`)
W
init  
wizardforcel 已提交
2 3 4

> 原文: [https://javabeginnerstutorial.com/vue-js/7-conditional-rendering-part-1/](https://javabeginnerstutorial.com/vue-js/7-conditional-rendering-part-1/)

W
wizardforcel 已提交
5
我们并不总是希望将所有内容呈现到我们的网页上。 根据特定条件或特定表达式的值,我们可能希望隐藏/显示/附加或分离元素。 这只不过是条件渲染 – *基于条件*渲染元素。 这可以使用简单的`if-else`语句来实现。 但是,我们将如何使用 Vue? 现在就纠正一下吧!
W
init  
wizardforcel 已提交
6 7 8 9 10

Vue **指令**再来一次! 在这方面,我们有`v-if``v-else``v-else-if`来帮助我们。 让我们逐一查看示例,以进行深入了解。 我将撒很多视觉效果以简化此过程。

首先,让我们有两个带有一些文本的段落标签,

W
wizardforcel 已提交
11
![](img/14aaafae94bb48d942bd3f553d948bfd.png)
W
init  
wizardforcel 已提交
12

W
wizardforcel 已提交
13
## 1\. `v-if`指令
W
wizardforcel 已提交
14 15 16 17 18 19 20 21 22 23 24

使用`v-if`指令的语法如下:

```html
<HTML-tag v-if=”condition or expression that evaluates to true or false>
```

如果条件为真/求值为真,则将渲染标签。

让我们向 Vue 实例的数据对象添加`display`属性,并为其赋予`false`值。

W
wizardforcel 已提交
25
```jsscript
W
wizardforcel 已提交
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
data: { message: "Hi", display: false } 
```

现在,将`v-if`指令添加到第一段标签中,并指定`display`条件,基于该条件,将不显示标签。

```html
<p v-if="display">Display evaluates to true</p>
```

由于`display`的值现在设置为`false`,因此不会呈现带有文本“**显示求值为真**”的第一个`<p>`标签。

![v-if false condition](img/683e241dceed1bc821e64308c0558eb1.png)

`display`值更改为`true`将呈现第一个`<p>`标签的内容。

![conditional rendering v-if](img/b81014dd6939b1699e77e2dc0eef84b9.png)

W
wizardforcel 已提交
43
## 2\\. `v-else`指令
W
wizardforcel 已提交
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63

假设您要在显示为`true`时显示第一个`<p>`标签,并在显示结果为`false`时显示第二个`<p>`标签。 在这种情况下,我们可以使用`v-else`指令。 它类似于`else`块。

```html
<p v-if="display">Display evaluates to true</p> 
<p v-else>You always get to see me :)</p>
```

`display`设为`true`时,将在`v-if`指令的条件求值为`true`的情况下呈现第一个`<p>`标签。

![v-else true](img/7d0940f1b5db61e3875cb2e2263d9f58.png)

`display`更改为`false`只会使用`v-else`伪指令呈现第二个`<p>`标签,如下所示,

![v-else false condition](img/0f65cbd6fe9e24b6e96377776a4ac52f.png)

**注意:** *具有`v-else`指令的 HTML 元素必须紧随具有`v-if`的元素。 否则,`v-else`元素将不会被识别。 换句话说,不要在`v-if`元素和`v-else`元素之间添加任何元素。*

可以在`<div>``<template>`等帮助下将这些指令添加到单个 HTML 元素或元素块中。考虑一种情况,您希望根据条件显示错误消息。 在这种情况下`if-else`块会派上用场。

W
wizardforcel 已提交
64
## 3\. `v-else-if`指令
W
wizardforcel 已提交
65 66 67 68 69

它也与`v-if`元素一起使用。 该指令充当“`else-if`”条件。 与其他任何编程语言一样,它可以链接多次。

让我们向数据对象添加`val`属性,并为其提供数值。

W
wizardforcel 已提交
70
```jsscript
W
wizardforcel 已提交
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
data: { message: "Hi", val: 5 }
```

`v-if``v-else-if``v-else`伪指令添加到三个`<p>`标签并添加条件。

```html
<p v-if="val < 10">Val is less than 10</p> 
<p v-else-if="val > 10 && val < 20">val is between 10 and 20</p> 
<p v-else>Pretty high val!!</p>
```

现在,让我们更改`val`属性的值,并查看输出如何变化。

首先,将`val`设为`5`。 由于它小于 10,因此`v-if`条件求值为`true`并被渲染。

![v-else-if first expression](img/cb9ed33f1627c5ef3a74aed8e5c6292f.png)

现在将`val`更改为`15``v-else-if`条件求值为`true`,并将其呈现到 DOM,如下所示。

![v-else-if second expression](img/29869b7f60d5b9f9d87511893e889e6b.png)

`val`更改为`90`会使`v-if``v-else-if`表达式均求值为`false`。 因此,将渲染`v-else`元素。

![v-else-if third condtion](img/ba1ad56b6d8ad18480db60329a7bb779.png)

**注意:** *与`v-else`相似,带有`v-else-if`指令的元素必须紧随带有`v-if`或`v-else-if`的元素。 否则,将无法识别。*

上面讨论的所有代码都可以在 [GitHub 仓库](https://github.com/JBTAdmin/vuejs)中找到。

是时候戴上开发人员的帽子,并尝试使用这些指令了! 祝你今天愉快。