1. 程式人生 > >Vue.js 模板語法

Vue.js 模板語法

title 簡單的 無法 屬性綁定 大寫 hello 關於 官方 直接

本章節將詳細介紹 Vue.js 模板語法,如果對 HTML +Css +JavaScript 有一定的了解,學習起來將信手拈來。

Vue.js 使用了基於 HTML 的模版語法,允許開發者聲明式地將 DOM 綁定至底層 Vue 實例的數據。在底層的實現上, Vue 將模板編譯成虛擬 DOM 渲染函數。結合響應系統,在應用狀態改變時, Vue 能夠智能地計算出重新渲染組件的最小代價並應用到 DOM 操作上。

插值

文本

文本插值是最常見的一種數據綁定方式,語法是使用雙括號(Mustache)將變量包含。

實例

<div id="app">
    <p>{{ message }}</p>
</div>

<script>
    var app = new Vue({
        el: ‘#app‘,
        data: {
            message: ‘Hello World! Vue‘
        }
    })
</script>

上述 HTML 代碼中的 message 與 script 中 data 的 message 屬性綁定,兩者數據同步,當我們更新data中對應的屬性值時,無需操作 HTML,頁面會自動更新數據。

我們也可以使用 v-once 指令,表示只執行一次插值,後面如果數據有改變,插值將不會更新。

實例

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

<script>
    var app = new Vue({
        el: ‘#app‘,
        data: {
            message: ‘Hello World! Vue‘
        }
    })
</script>

HTML

輸出 HTML 代碼,可以使用 v-html 指令。

實例

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

<script>
    var app = new Vue({
        el: ‘#app‘,
        data: {
            message: ‘Hello World! 歡迎學習Vue‘,
            html:‘<font color="red">這是我的標題</font>‘
        }
    })
</script>

上述代碼會將 message 中的值作為 HTML 元素插入 <p></p>

註意:在頁面上動態的渲染html是一件很危險的事情,因為它很容易導致 XSS 攻擊 (跨站腳本攻擊)。 在vue的官方文檔也有說明這一點

屬性

要給 HTML 元素綁定屬性,不能直接使用文本插值,vue 有特定的指令 【v-bind】進行屬性的綁定。

實例

<div id="app">
    <h2 v-bind:class="value">v-bind</h2>
</div>

<script>
var app = new Vue({
    el: "#app",
    data: {
        value: "bind"
    }
})
</script>

上述代碼中,我們為 h2 標簽添加了一個 class=“bind” 的屬性。

屬性的插值使用比較頻繁,所以vue也提供了該指令的簡寫【:】,一個冒號,效果跟使用【v-bind:】一樣。

實例

<div id="app">
    <h2 v-bind:id="id" :class="v_class" :title="v_title">vue 多屬性綁定</h2>
</div>

<script>
    var app = new Vue({
        el: "#app",
        data: {
            id:"test_id",
            v_class: "v_class",
            v_title:"vue 的v-bind多屬性綁定"
        }
    })
</script>

JavaScript 表達式

上述介紹的幾種插值方式都是簡單的鍵值綁定,但在實際開發中,部分值要根據一些規則進行處理,這時候可以使用 JavaScript 表達式來實現。

實例

<div id="app">
    <h2 v-bind:id="id" :class="v_class" :title="v_title">vue 多屬性綁定</h2>
    <!-- toLowerCase(),將字母轉換為小寫 -->
    <h2>{{name.toLowerCase()}}</h2>  <!--這裏返回為pzkloveyou -->
</div>

<script>
    var app = new Vue({
        el: "#app",
        data: {
            id:"test_id",
            v_class: "v_class",
            v_title:"vue 的v-bind多屬性綁定",
            name:‘PZKLOVEYOU‘
        }
    })
</script>

上述代碼在輸出時把大寫的 PZKLOVEYOU 轉換成了小寫的 pzkloveyou。

註意:使用 JavaScript 表達式進行運算時,只能使用單個表達式或者鏈式調用,不能使用語句。

指令

指令指的是帶有【v-】前綴的特殊屬性,在插值中,我們已經使用了【v-html】和【v-bind】這兩個指令。可以看出,指令的職責是當表達式的值改變時,響應式地作用於 DOM。

參數

<a v-bind:href="url"></a>

上述代碼中 href 就是【v-bind】指令的參數,告知【v-bind】指令將 href 屬性和 url 的值綁定在一起。

修飾符

修飾符(Modifiers)是以半角句號 . 指明的特殊後綴,用於指出一個指令應該以特殊方式綁定。

<form v-on:submit.prevent="onSubmit"></form>

上述代碼中,.prevent 是一個修飾符,告訴【v-on】指令對於觸發的事件調用 event.preventDefault()。

更多關於修飾符的知識我們將在後續章節學習。

過濾器

對於一些要經過復雜計算才顯示的插值,簡單的表達式可能無法滿足,這時可以使用vue的過濾器進行處理。 過濾器在插值和【v-bind】指令中使用,格式如下:

<!-- 在兩個大括號中 -->
{{ name | myfilters }}

<!-- 在 v-bind 指令中 -->
<div v-bind:id="rawId | formatId"></div>

實例

<div id="app">
    <h2>{{name | myfilter}}</h2>
</div>

<script>
    var app = new Vue({
        el: "#app",
        data: {
            name: "pzk"
        },
        filters: {
            myfilter(value) {
                return value.split(‘‘).reverse().join(‘‘);   //函數返回的是kzp
            }
        }
    })
</script>

上述代碼中定義了一個myfilters的過濾器,功能是將插值進行反轉後輸出。

多個過濾器可以串聯使用,下面實例是在一個插值中使用了兩個過濾器:

實例

<div id="app">
    <p>{{name | myfilter}}</p>
    <p>{{name | myfilter1 | touppercase}}</p>
</div>

<script>
    var app = new Vue({
        el: "#app",
        data: {
            name: "pzk"
        },
        filters: {
            myfilter(value) {
                return value.split(‘‘).reverse().join(‘‘);   //函數返回的是kzp
            },
            myfilter1(value) {
                return value.split(‘‘).reverse().join(‘‘); //函數返回的是kzp 同上,在這裏只是做一個小小的區別
            },
            touppercase(value) {
                return value.toUpperCase(); //函數返回的是KZP   字母變成大寫
            }
        }
    })
</script>

上述代碼中過濾器從左到右依次執行,先將插值反轉,然後再轉換成大寫輸出。

縮寫

對於【v-on】和【v-bind】這兩個最常使用的指令,vue提供了簡寫。

v-bind
<!-- 完整語法 -->
<a v-bind:href="url"></a>

<!-- 縮寫 -->
<a :href="url"></a>
v-on
<!-- 完整語法 -->
<a v-on:click="doSomething"></a>

<!-- 縮寫 -->
<a @click="doSomething"></a>

本章完,都是一些比較簡單的知識分享,敬請下次的分享。

Vue.js 模板語法