1. 程式人生 > >Vue架構【基礎篇-第04章】:模板語法

Vue架構【基礎篇-第04章】:模板語法

模板語法

Vue.js使用了基於HTML的模板語法,允許開發者宣告式的將DOM繫結至底層Vue例項的資料。所有Vue.js的模板都是合法的HTML,所以能被遵循規範的瀏覽器和HTML解析器解析。

在底層的實現上,Vue將模板編譯成虛擬DOM渲染函式,結合響應系統,Vue能夠智慧的計算出最少需要重新渲染多少元件,並把DOM操作次數減到最少。

一、插入值

1. 插入文字

資料繫結最常見的形式就是使用"Mustache"語法(雙大括號)的文字插值:

<span>Message: {{ msg }}</span>

Mustache 標籤將會被替代為對應資料物件上 msg

 屬性的值。無論何時,繫結的資料物件上 msg 屬性發生了改變,插值處的內容都會更新。

通過使用 v-once 指令,你也能執行一次性地插值,當資料改變時,插值處的內容不會更新。但請留心這會影響到該節點上的其它資料繫結:

<span v-once>這個將不會改變: {{ msg }}</span>

1.2  指令系統之v-once

作用:只渲染元素和元件一次,隨後的重新渲染,元素/元件及其所有的子節點被視為靜態內容並跳過。這可以用於優化更新效能。

2. 原始HTML

雙括號會將資料解釋為普通文字,而非HTML程式碼。為了輸出真正的HTML,我們需要使用 v-html 指令;

2.1  指令系統之 v-html,以及 v-text

作用:v-html輸出真正的HTML。v-text輸出含有程式碼的文字

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app-6">
    {{ msg }}
    <div v-text="msg"></
div> <div v-html="msg"></div> </div> </body> <script src="vue.js"></script> <script> var app6 = new Vue({ el: "#app-6", data() { return { msg:"<h2>燈火闌珊</h2>" } } }) </script> </html>
v-html 以及 v-text

結果:

3. 使用JavaScript表示式

迄今為止,在我們的模板中,我們一直都只繫結簡單的屬性鍵值。但實際上,對於所有的資料繫結,Vue.js 都提供了完全的 JavaScript 表示式支援。

{{ number + 1 }}

{{ ok ? 'YES' : 'NO' }}

{{ message.split('').reverse().join('') }}

<div v-bind:id="'list-' + id"></div>

這些表示式會在所屬 Vue 例項的資料作用域下作為 JavaScript 被解析。有個限制就是,每個繫結都只能包含單個表示式,所以下面的例子都不會生效。

<!-- 這是語句,不是表示式 -->
{{ var a = 1 }}

<!-- 流控制也不會生效,請使用三元表示式 -->
{{ if (ok) { return message } }}

二、指令

指令是帶有 v- 字首的特殊特性。指令特性的值預期是單個JS表示式。指令的職責是當表示式的值改變時,將其產生的連帶影響,響應式的作用於DOM。

<p v-if="seen">現在你看到我了</p>

這裡,v-if 指令將根據表示式 seen 的值的真假來插入/移除 <p> 元素。

1. 引數

一些指令能夠接收一個“引數”,在指令名稱之後以冒號表示。例如,v-bind 指令可以用於響應式地更新 HTML 特性:

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

在這裡 href 是引數,告知 v-bind 指令將該元素的 href 特性與表示式 url 的值繫結。

另一個例子是 v-on 指令,它用於監聽 DOM 事件:

<a v-on:click="doSomething">...</a>

2.  修飾符

修飾符 (Modifiers) 是以半形句號 . 指明的特殊字尾,用於指出一個指令應該以特殊方式繫結。例如,.prevent 修飾符告訴 v-on 指令對於觸發的事件呼叫 event.preventDefault()

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

在接下來對 v-on 和 v-for 等功能的探索中,你會看到修飾符的其它例子。

三、縮寫

v- 字首作為一種視覺提示,用來識別模板中 Vue 特定的特性。當你在使用 Vue.js 為現有標籤新增動態行為 (dynamic behavior) 時,v- 字首很有幫助,然而,對於一些頻繁用到的指令來說,就會感到使用繁瑣。同時,在構建由 Vue.js 管理所有模板的單頁面應用程式 (SPA - single page application) 時,v- 字首也變得沒那麼重要了。因此,Vue.js 為 v-bind和 v-on 這兩個最常用的指令,提供了特定簡寫:

1. v-bind縮寫

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

<!-- 縮寫 -->
<a :href="url">...</a>

2. v-on縮寫

<!-- 完整語法 -->
<a v-on:click="doSomething">...</a>

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

它們看起來可能與普通的 HTML 略有不同,但 : 與 @ 對於特性名來說都是合法字元,在所有支援 Vue.js 的瀏覽器都能被正確地解析。而且,它們不會出現在最終渲染的標記中。縮寫語法是完全可選的,但隨著你更深入地瞭解它們的作用,你會慶幸擁有它們。