1. 程式人生 > 實用技巧 >507 Mustache,v-once,v-html,v-text,v-pre,v-cloak

507 Mustache,v-once,v-html,v-text,v-pre,v-cloak

Mustache

如何將data中的文字資料,插入到HTML中呢?
我們已經學習過了,可以通過Mustache語法(也就是雙大括號)。
Mustache: 鬍子/鬍鬚.
我們可以像下面這樣來使用,並且資料是響應式的


v-once

但是,在某些情況下,我們可能不希望介面隨意的跟隨改變
這個時候,我們就可以使用一個Vue的指令
v-once:
該指令後面不需要跟任何表示式(比如之前的v-for後面是由跟表示式的)
該指令表示元素和元件(元件後面才會學習)只渲染一次,不會隨著資料的改變而改變。
程式碼如下:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>

<body>

    <div id="app">
        <h2>{{message}}</h2>
        <h2 v-once>{{message}}</h2>
    </div>

    <script src="../js/vue.js"></script>
    <script>
        const app = new Vue({
            el: '#app',
            data: {
                message: '你好啊'
            }
        })
    </script>

</body>

</html>

v-html

某些情況下,我們從伺服器請求到的資料本身就是一個HTML程式碼
如果我們直接通過{{}}來輸出,會將HTML程式碼也一起輸出。
但是我們可能希望的是按照HTML格式進行解析,並且顯示對應的內容。
如果我們希望解析出HTML展示
可以使用v-html指令
該指令後面往往會跟上一個string型別
會將string的html解析出來並且進行渲染

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>

<body>

    <div id="app">
        <h2>{{url}}</h2>
        <h2 v-html="url"></h2>
    </div>

    <script src="../js/vue.js"></script>
    <script>
        const app = new Vue({
            el: '#app',
            data: {
                message: '你好啊',
                url: '<a href="http://www.baidu.com">百度一下</a>'
            }
        })
    </script>

</body>

</html>

v-text

v-text作用和Mustache比較相似:都是用於將資料顯示在介面中
v-text通常情況下,接受一個string型別

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>

<body>

    <div id="app">
        <h2>{{message}}, 李銀河!</h2>
        <h2 v-text="message">, 李銀河!</h2>
    </div>

    <script src="../js/vue.js"></script>
    <script>
        const app = new Vue({
            el: '#app',
            data: {
                message: '你好啊'
            }
        })
    </script>

</body>

</html>

v-pre

v-pre用於跳過這個元素和它子元素的編譯過程,用於顯示原本的Mustache語法。
比如下面的程式碼:
第一個h2元素中的內容會被編譯解析出來對應的內容
第二個h2元素中會直接顯示{{message}}

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>

<body>

    <div id="app">
        <h2>{{message}}</h2>
        <h2 v-pre>{{message}}</h2>
    </div>

    <script src="../js/vue.js"></script>
    <script>
        const app = new Vue({
            el: '#app',
            data: {
                message: '你好啊'
            }
        })
    </script>

</body>

</html>

v-cloak

在某些情況下,我們瀏覽器可能會直接顯然出未編譯的Mustache標籤。
cloak: 斗篷

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        [v-cloak] {
            display: none;
        }
    </style>
</head>

<body>

    <div id="app" v-cloak>
        <h2>{{message}}</h2>
    </div>

    <script src="../js/vue.js"></script>
    <script>
        // 在vue解析之前, div中有一個屬性v-cloak
        // 在vue解析之後, div中沒有一個屬性v-cloak
        setTimeout(function () {
            const app = new Vue({
                el: '#app',
                data: {
                    message: '你好啊'
                }
            })
        }, 1000)
    </script>

</body>

</html>