本章節將詳細介紹 Vue.js 模板語法,若是對 HTML +Css +JavaScript 有必定的瞭解,學習起來將信手拈來。html
Vue.js 使用了基於 HTML 的模版語法,容許開發者聲明式地將 DOM 綁定至底層 Vue 實例的數據。在底層的實現上, Vue 將模板編譯成虛擬 DOM 渲染函數。結合響應系統,在應用狀態改變時, Vue 可以智能地計算出從新渲染組件的最小代價並應用到 DOM 操做上。vue
插值app
文本函數
文本插值是最多見的一種數據綁定方式,語法是使用雙括號(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,頁面會自動更新數據。url
咱們也可使用 v-once 指令,表示只執行一次插值,後面若是數據有改變,插值將不會更新。spa
<div id="app"> <p v-once>{{ message }}</p> </div> <script> var app = new Vue({ el: '#app', data: { message: 'Hello World! Vue' } }) </script>
輸出 HTML 代碼,可使用 v-html 指令。code
<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>
中orm
注意:在頁面上動態的渲染html是一件很危險的事情,由於它很容易致使 XSS 攻擊 (跨站腳本攻擊)。 在vue的官方文檔也有說明這一點htm
要給 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 表達式來實現。
<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>
本章完,都是一些比較簡單的知識分享,敬請下次的分享。