# Vue.js 學習旅程Mile 5 – 模板語法之二:Directives 指令 ###### tags: `w3HexSchool` `Vue` `Javascript` ## 指令 Directives 指令 (Directives) 是帶有 `v-` 前綴的特殊屬性 attribute。指令的值預期是單個 Javascript 表達式(Expression)。當表達式的值改變時,指令會響應式地將其產生的影響作用於 DOM 上。 常見的例如:`v-text`, `v-if`, `v-on` 等,後面會有篇章詳細的介紹這些常見的模板指令的用法。此篇文章主要在了解指令的配置方式。 另外,除了使用這些固定的模板語法外,我們也可以自定義指令。這個部分之後會有文章做專門的介紹。 ### 比較 Mustache 語法:取代頁面上的某個區塊 `<div></div>` Directives 指令:放在 HTML 標籤內,影響該 DOM 元素 ### 配置方式 :::info **指令:[參數].修飾符="值"** **Directive:[Argument].Modifier="Value"** ::: ### Directive 不需要表達式。Directive 直接作用在元素上。 例如:`v-once`。只渲染元素和元件一次。隨後的重新渲染,元素/元件及其所有的子節點將被視為靜態內容並跳過。可以用於優化更新性能。 ```htmlmixed= <!-- 單個元素 --> <span v-once>This will never change: {{msg}}</span> ``` ### Directive = "Value" Directive 依照 Value 作用在元素上。 例如:`v-text="msg"`。更新元素的 textContent。 ```htmlmixed= <span v-text="msg"></span> <!-- 和下面的一樣 --> <span>{{msg}}</span> ``` ### Directive:Argument = "Value" Directive 依照 Value 作用在 Argument 上。 例如:`v-bind:src`,動態地綁定一個或多個特性,或是 `v-on:click`,監聽 DOM 事件。 ```htmlmixed= <!-- 綁定一個屬性 --> <img v-bind:src="imageSrc"> ``` ```htmlmixed= <!-- 監聽 click 事件 --> <a v-on:click="doSomething">...</a> ``` ### Directive:[Argument] = "Value" 動態參數。 從 2.6.0 開始,可以用方括號括起來的 JavaScript 表達式作為一個指令的參數。 ```htmlmixed= <a v-bind:[attributeName]="url"> ... </a> ``` 這裡的 `attributeName` 會被作為一個 JavaScript 表達式進行動態求值,求得的值將會作為最終的參數來使用。例如,如果你的 Vue 實例有一個 `data` 屬性 `attributeName`,其值為 `"href"`,那麼這個綁定將等同於 `v-bind:href`。 ```htmlmixed= <a v-on:[eventName]="doSomething"> ... </a> ``` 在這個範例中,當 `eventName` 的值為 `"focus"` 時,`v-on:[eventName]` 等同於 `v-on:focus`。 #### 動態參數限制 動態參數的值預設為字串。若為 `null` 的話,則可以用來解除其綁定。其他非字串 或 `null` 型別的值就會出現錯誤警告。 ### Directive:Argument.Modifier="Value" Directive 依照 Modifier 設定的特殊方式將 Value 作用在 Argument 上。 例如:`v-on:click.once`、`v-on:submit.prevent` ```htmlmixed= <!-- 點擊事件只會觸發一次 --> <button v-on:click.once="doThis"></button> ``` ```htmlmixed= <!-- 調用 event.preventDefault()--> <form v-on:submit.prevent="onSubmit">...</form> ``` ## 縮寫 Shorthands 對於一些頻繁用到的指令來說,使用 `v-` 前綴會感到繁瑣。因此, Vue 為 `v-bind` 和 `v-on` 這兩個最常用的指令,提供了特定縮寫: ### v-bind 縮寫 省略 `v-bind`,剩下`:` ```htmlmixed= <!-- 完整語法 --> <a v-bind:href="url">...</a> <!-- 縮寫 --> <a :href="url">...</a> <!-- 動態參數的縮寫 (2.6.0+) --> <a :[key]="url"> ... </a> ``` ### v-on 縮寫 `v-on` 縮寫為 `@` ```htmlmixed= <!-- 完整語法 --> <a v-on:click="doSomething">...</a> <!-- 縮寫 --> <a @click="doSomething">...</a> <!-- 動態參數的縮寫 (2.6.0+) --> <a @[event]="doSomething"> ... </a> ``` ## 結語 藉由這篇文章的整理,才對 Vue 的這些指令有了全面的了解,清楚他是如何配置的。不然之前都是看到一個記一個,沒有特別清楚他的規則,常常到後來就會被搞混。現在經過整理,希望對於之後在使用這些指令時能更駕輕就熟。 ## 參考資料 * [Vue.js Guide: Template Syntax-Directives](https://vuejs.org/v2/guide/syntax.html#Directives) * [Vue.js Core 30天屠龍記(第6天): 模板語法 Part 2 - Directives](https://ithelp.ithome.com.tw/articles/10203752) * [Vue.js API](https://cn.vuejs.org/v2/api/)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up