1. mustache语法

如何将 data中的文本数据,插入到 HTML中呢?

  • 我们可以通过 Mustache语法(也就是双大括号)

image.png

  1. <div id="app">
  2. <h2>{{message}}</h2>
  3. <!-- mustache语法中,不仅仅可以直接写变量,也可以写简单的表达式 -->
  4. <h2>{{firstName + ' ' + lastName}}</h2>
  5. <h2>{{firstName}} {{lastName}}</h2>
  6. <h2>{{counter * 2}}</h2>
  7. </div>
  8. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js" type="text/javascript" charset="utf-8"></script>
  9. <script type="text/javascript">
  10. const app = new Vue({
  11. el: '#app',
  12. data: {
  13. message: 'Mustache',
  14. firstName: 'Kobe',
  15. lastName: 'bryant',
  16. counter: 100
  17. }
  18. })
  19. </script>

2. v-once

但是,在某些情况下,我们可能不需要界面随意的跟随改变

  • 这个时候,我们就可以使用一个 Vue的指令

v-once

  • 该指令后面不需要跟任何表达式(比如之前的v-for后面是跟表达式的)
  • 该指令表示元素和组件之渲染一次,不会随着数据的改变而改变。

image.png

  1. <div id="app">
  2. <h2>{{message}}</h2>
  3. <h2 v-once>{{message}}</h2>
  4. </div>
  5. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js" type="text/javascript" charset="utf-8"></script>
  6. <script type="text/javascript">
  7. const app = new Vue({
  8. el: '#app',
  9. data: {
  10. message: 'Hello',
  11. }
  12. })
  13. </script>

3. v-html

某些情况下,我们从服务器请求到的数据本身就是一个HTML代码

  • 如果我们直接通过 {{}} 来输出,会将 HTML代码也一起输出。
  • 但是我们可能希望的是按照HTML格式进行解析,并且输出对应的内容。

如果我们希望解析出HTML展示

  • 可以使用 v-html 指令
    • 该指令后面往往会跟上一个string类型
    • 会将string的html解析出来进行渲染

image.png

  1. <div id="app">
  2. <h2>{{message}}</h2>
  3. <h2 v-html="url"></h2>
  4. </div>
  5. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js" type="text/javascript" charset="utf-8"></script>
  6. <script type="text/javascript">
  7. const app = new Vue({
  8. el: '#app',
  9. data: {
  10. message: 'good',
  11. url: '<a href="http://www.baidu.com">百度一下</a>'
  12. }
  13. })
  14. </script>

4. v-text

v-text 作用和 Mustache比较相似:都是用于数据显示在界面中。
v-text 通常情况下,接受一个string类型

注意:v-text 用的相对少,标签内的内容会被覆盖
image.png

  1. <div id="app">
  2. <h2>{{message}}</h2>
  3. <!-- v-text 用的相对少,标签内的内容会被覆盖 -->
  4. <h2 v-text="message"> !!!</h2>
  5. </div>
  6. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js" type="text/javascript" charset="utf-8"></script>
  7. <script type="text/javascript">
  8. const app = new Vue({
  9. el: '#app',
  10. data: {
  11. message: 'Hello World',
  12. }
  13. })
  14. </script>

5. v-pre

v-pre 用于跳过这个元素和它的子元素的编译过程,用于显示原本的 Mustache语法。
比如下面的代码:

  • 第一个 h2元素中的内容会被编译解析出来对应的内容。
  • 第二个 h2元素中会直接显示 {{message}}

image.png

  1. <div id="app">
  2. <h2>{{message}}</h2>
  3. <h2 v-pre>{{message}}</h2>
  4. </div>
  5. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js" type="text/javascript" charset="utf-8"></script>
  6. <script type="text/javascript">
  7. const app = new Vue({
  8. el: '#app',
  9. data: {
  10. message: 'good',
  11. }
  12. })
  13. </script>

6. v-cloak

在某些情况下,我们浏览器可能会直接显示出未编译的 Mustache标签。
clock:斗篷

image.png

  1. <style type="text/css">
  2. [v-cloak] {
  3. display: none;
  4. }
  5. </style>
  1. <div id="app">
  2. <h2 v-cloak>A: {{message}}</h2>
  3. <h2>B: {{message}}</h2>
  4. </div>
  5. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js" type="text/javascript" charset="utf-8"></script>
  6. <script type="text/javascript">
  7. //在 vue解析之前,div中有一个属性 v-cloak
  8. //在 vue解析之后,div中没有一个属性 v-cloak
  9. setTimeout(function () {
  10. const app = new Vue({
  11. el: '#app',
  12. data: {
  13. message: 'good',
  14. }
  15. })
  16. }, 1500)
  17. </script>

v-cloak 效果如上图

  • 可以使用 v-cloak 指令设置样式,这些样式会在 Vue 实例编译结束时,从绑定的 HTML 元素上被移除。
  • 当网络较慢,网页还在加载 Vue.js ,而导致 Vue 来不及渲染,这时页面就会显示出 Vue 源代码。我们可以使用 v-cloak 指令来解决这一问题。