149.md 4.6 KB
Newer Older
W
wizardforcel 已提交
1
# 5.数据绑定第 1 部分(文本,原始 HTML,JavaScript 表达式)
W
init  
wizardforcel 已提交
2 3 4

> 原文: [https://javabeginnerstutorial.com/vue-js/5-data-binding-p1/](https://javabeginnerstutorial.com/vue-js/5-data-binding-p1/)

W
wizardforcel 已提交
5
今天,我非常激动,因为我们将要讨论 Vue.js 中一些最有趣的数据绑定技术。 有必要了解,我们提供了多种将 DOM 与基础 Vue 实例的数据对象绑定的方法。
W
init  
wizardforcel 已提交
6

W
wizardforcel 已提交
7
## 文本插值
W
init  
wizardforcel 已提交
8

W
wizardforcel 已提交
9
还记得我们在[先前文章](https://javabeginnerstutorial.com/js/vue-js/2-template-syntax-reactivity/)之一中讨论的胡须/模板语法`{{ }}`吗? 这是数据绑定的基本形式,称为“**文本插值**”。 可以使用伪指令`v-once`执行一次插值,尽管稍后会更新该属性的初始值。 单击[此处](https://javabeginnerstutorial.com/vue-js/3-vue-directives/),以获取有关`v-once`的详细说明以及代码示例和屏幕截图。
W
init  
wizardforcel 已提交
10

W
wizardforcel 已提交
11
## 原始 HTML 插值
W
init  
wizardforcel 已提交
12

W
wizardforcel 已提交
13
默认情况下,Vue 始终将模板语法中的数据视为纯文本。 在大多数情况下,这正是我们想要的。 但是,编码完全是旅途中意外的转折。 如果有一天我们想传递原始 HTML 并相应地在 DOM 中呈现该怎么办? 当然,您不能使用那些双花括号,因为如果这样做,您将得到。
W
init  
wizardforcel 已提交
14

W
wizardforcel 已提交
15
![data binding raw HTML](img/70ef2d5460c92c8046ff872d1c287630.png)
W
init  
wizardforcel 已提交
16

W
wizardforcel 已提交
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 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 101 102 103 104 105
并不奇怪吗? 整个 HTML 代码呈现为纯文本。 这就是模板语法的工作方式,并且这种行为可以防止任何第三方将不需要的代码注入您的网站(多么可怕?!)。 因此,切勿在用户无法控制的用户提供的内容上使用此功能。 因此,如果您真的相信提供 HTML 代码的源代码是安全的,并希望将其呈现给 DOM,请使用另一个指令`v-html`

![v-html](img/6a0607653cf9dc089d2f8898879809a8.png)

使用`v-html`指令会将`<span>`标记的内容替换为`vueLink`数据属性的值,并将其解释为纯 HTML。 因此,超链接以指定的绿色显示。

## **使用 JavaScript 表达式**

双花括号以及显示纯文本还可以求值**单个** JavaScript 表达式。

请记住,**仅是单个表达式**。 不是语句,不是流控件,不是任何用户定义的全局变量! 让我们来看一些例子

1.  可以始终在模板语法中访问“`message`”属性的值。 现在,我们可以对其应用任何可用的 JavaScript `String`方法。

```javascript
{{ message.length }}
```

2.  js 允许访问模板表达式中的几个全局对象,即`Math``Date`。 小心,不允许访问用户定义的全局变量。

```javascript
{{ Math.PI }} {{ new Date() }}
```

3.  流控制语句(如`if-else``for``while``do-while`等)将不起作用,因此剩下的唯一选择是使用三元表达式。 始终建议将复杂的逻辑放入我们将在以后的文章中详细讨论的方法中。

```javascript
{{ message === "Hi everyone!" ? "Welcome to the World of Vue" : "Hola" }}
```

此外,如前所述,在模板语法内只能使用单个表达式。 即使是一个简单的表达式也无法使用,例如“`let level = 1`”。

完整的代码如下,

### `Index.html`

```html
<!DOCTYPE html>
<html>
  <head>
    <title>Hello Vue!</title>
    <!-- including Vue with development version CDN -->
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  </head>
  <body>
    <div id="app">
      <!-- text interpolations -->
      <h1>{{ message }}</h1>
      <p>For more info. on Vue, click {{ vueLink }}</p>
      <!-- raw HTML interpolation -->
      <p>With v-html directive:</br>
        For more info. on Vue, click <span v-html="vueLink"></span>
      </p>
      <!-- JavaScript expressions -->
      <p>
        Length of the 'message' String: {{ message.length }} </br>
        Value of PI: {{ Math.PI }} </br>
        Today's date is: {{ new Date() }} </br>
        Result of ternary expression is:
          {{ message === "Hi everyone!" ? "Welcome to the World of Vue" : "Hola" }} </br>
      </p>
    </div>
    <!-- including index.js file -->
    <script src="index.js"></script>
  </body>
</html>
```

### `Index.js`

```javascript
var app = new Vue({
  el: "#app",
  data: {
    message: "Hi everyone!",
    vueLink: "<a href='https://vuejs.org/' style='color:green'>here</a>"
  }
});
```

输出如下,

![Using JavaScript expressions](img/b723c5b8f6cfc7058907ba787ddf98ee.png)

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

在我请假之前,让我先给您的大脑一个小任务。 我们无法在 HTML 属性中使用此模板/胡子语法。 您能想到其他选择吗? 我相信你可以!

祝你今天愉快 ?