Vue基礎:vue模板語法

Vue.js 使用了基於 HTML 的模板語法,允許開發者聲明式地將 DOM 綁定至底層 Vue 實例的數據。所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循規範的瀏覽器和 HTML 解析器解析。

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

插值

1、文本
數據綁定最常見的形式就是使用“Mustache”語法 (雙大括號) 的文本插值:

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

例子

<div id="app">
   <span>{{message}}</span>
  </div>
  <script>
   var app1=new Vue({
    el:"#app",
    data:{
     message:"2020!"
    }
   })
  </script>

在這裏插入圖片描述

通過使用 v-once 指令,你也能執行一次性地插值,當數據改變時,插值處的內容不會更新。

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

例子

<div id="app">
   <span>會改變的值:{{message}}</span>
   <br />
   <span v-once>不變的值:{{message}}</span>
  </div>
  <script>
   var app1=new Vue({
    el:"#app",
    data:{
     message:"2020!"
    }
   })
  </script>

在這裏插入圖片描述

2、原始html

雙大括號會將數據解釋爲普通文本,而非 HTML 代碼。爲了輸出真正的 HTML,你需要使用 v-html 指令:

<p>Using mustaches: {{ rawHtml }}</p>
<p>Using v-html directive: <span v-html="rawHtml"></span></p>

span 的內容將會被替換成爲屬性值 rawHtml,直接作爲 HTML——會忽略解析屬性值中的數據綁定。

注意:在站點上動態渲染的任意 HTML 可能會非常危險,因爲它很容易導致 XSS 攻擊。請只對可信內容使用 HTML 插值,絕不要對用戶提供的內容使用插值。
例子

<div id="app">
  <p>正常情況下:{{msghtml}}</p>
  <p>使用v-html的情況下:<span v-html="msghtml"></span></p>
 </div>
 <script>
  var app1=new Vue({
   el:"#app",
   data:{
    msghtml:'<span style="color:red">紅色字體顯示</span'
   }
  })
 </script>

在這裏插入圖片描述
3、attribute
Mustache 語法不能作用在 HTML attribute 上,遇到這種情況應該使用 v-bind 指令:

<div v-bind:id="dynamicId"></div>

這就能夠通過控制 data 下的 dynamicId 的值來控制 div 標籤上 id 屬性的值。

對於布爾 attribute (它們只要存在就意味着值爲 true),v-bind 工作起來略有不同,在這個例子中:

<button v-bind:disabled="isButtonDisabled">Button</button>

如果 isButtonDisabled 的值是 null、undefined 或 false,則 disabled attribute 甚至不會被包含在渲染出來的 <button> 元素中。
在這裏插入圖片描述

4、使用JavaScript表達式

對於所有的數據綁定,Vue.js 都提供了完全的 JavaScript 表達式支持。

表達式會在所屬 Vue 實例的數據作用域下作爲 JavaScript 被解析。有個限制就是,每個綁定都只能包含單個表達式。

例子

<div id="app">
   <p>number+2={{num+2}}</p>
   <p>{{ok?'yes':'no'}}</p>
   <p>{{message.split('')}}</p>
   <p>{{message.split('').reverse()}}</p>
   <p>{{message.split('').reverse().join('+')}}</p>
   <p>{{message.split('').reverse().join('')}}</p>
  </div>
  <script>
   var app1=new Vue({
    el:'#app',
    data:{
     num:3,
     ok:'true',
     message:'12345'
    }    
   })
  </script>

在這裏插入圖片描述

指令

指令 (Directives) 是帶有 v- 前綴的特殊 attribute。指令 attribute 的值預期是單個 JavaScript 表達式 (v-for 是例外)。

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

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

2、接收動態參數

(1)從 2.6.0 開始,可以用方括號括起來的 JavaScript 表達式作爲一個指令的參數:

<a v-bind:[attributeName]="url"> ... </a>

attributeName 會被作爲一個 JavaScript 表達式進行動態求值,求得的值將會作爲最終的參數來使用。例如,如果你的 Vue 實例有一個 data 屬性 attributeName,其值爲 “href”,那麼這個綁定將等價於 v-bind:href

(2)使用動態參數爲一個動態的事件名綁定處理函數:

<a v-on:[eventName]="doSomething"> ... </a>

eventName 的值爲 "focus" 時,v-on:[eventName] 將等價於 v-on:focus

(3)對動態參數的值的約束

動態參數預期會求出一個字符串,異常情況下值爲 null。這個特殊的 null 值可以被顯性地用於移除綁定。任何其它非字符串類型的值都將會觸發一個警告。

(4)對動態參數表達式的約束

動態參數表達式有一些語法約束,因爲某些字符,如空格和引號,放在 HTML attribute 名裏是無效的。

<a v-bind:['foo' + bar]="value"> ... </a>

3、修飾符
修飾符 (modifier) 是以半角句號 . 指明的特殊後綴,用於指出一個指令應該以特殊方式綁定。例如,.prevent 修飾符告訴 v-on 指令對於觸發的事件調用 event.preventDefault()

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

縮寫

v-bind縮寫

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

v-on縮寫

<!-- 完整語法 -->
<a v-on:click="doSomething">...</a>
<!-- 縮寫 -->
<a @click="doSomething">...</a>
發佈了132 篇原創文章 · 獲贊 26 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章