Vue.js 使用一種超集的 HTML 樣板語言。我們可以使用插值和指令。本文將解釋指令。
在Vue.js 模板和插值中,我們看到了如何在 Vue 模板中嵌入數據。
本文將解釋 Vue.js 在模板中提供的另一種技術:指令。
指令基本上就像是添加在模板內的 HTML 屬性。它們都以 v-
開頭,表示它們是 Vue 的特殊屬性。
讓我們逐一看一下每個 Vue 指令的詳細用法。
v-text
可以使用 v-text
指令來替代插值,它執行相同的工作:
<span v-text="name"></span>
v-once
你知道 {{ name }}
是綁定到組件數據的 name
屬性的。當你的組件數據中的 name
發生變化時,Vue 會在瀏覽器中更新該值。
除非使用 v-once
指令,它基本上就像是一個 HTML 屬性:
<span v-once>{{ name }}</span>
v-html
當你使用插值來打印數據屬性時,HTML 會被轉義。這是 Vue 自動保護免受 XSS 攻擊的一種很好的方式。
然而,有時你想要輸出 HTML 並讓瀏覽器解釋它。你可以使用 v-html
指令:
<span v-html="someHtml"></span>
v-bind
插值只在標籤內容中起作用,無法在屬性上使用。
屬性必須使用 v-bind
:
<a v-bind:href="url">{{ linkText }}</a>
v-bind
如此常見,所以它還有一種簡略語法:
<a v-bind:href="url">{{ linkText }}</a>
<a :href="url">{{ linkText }}</a>
使用 v-model
雙向綁定
v-model
允許我們綁定表單輸入元素(例如),在用戶更改字段內容時更改 Vue 數據屬性:
<input v-model="message" placeholder="輸入一條消息">
<p>消息是:{{ message }}</p>
<select v-model="selected">
<option disabled value="">選擇一個水果</option>
<option>蘋果</option>
<option>香蕉</option>
<option>草莓</option>
</select>
<span>選擇的水果:{{ selected }}</span>
使用運算式
你可以在指令中使用任何 JavaScript 運算式:
<span v-text="'你好,' + name + '!'"></span>
<a v-bind:href="'https://' + domain + path">{{ linkText }}</a>
指令中使用的任何變量都引用相應的數據屬性。
條件語句
在指令內部,你可以使用三元運算符進行條件檢查,因為它是一個表達式:
<span v-text="name == Flavio ? '你好 Flavio!' : '你好' + name + '!'"></span>
還有專門的指令可供你執行更有組織的條件語句:v-if
、v-else
和 v-else-if
。
<p v-if="shouldShowThis">嘿!</p>
shouldShowThis
是包含在組件數據中的布林值。
循環
v-for
允許你渲染一個項目列表。與 v-bind
一起使用,可以設置列表中每個項目的屬性。
你可以對一個普通的數值數組進行迭代:
<template>
<ul>
<li v-for="item in items">{{ item }}</li>
</ul>
</template>
<script>
export default {
data() {
return {
items: ['汽車', '自行車', '狗']
}
}
}
</script>
或者對一個對象數組進行迭代:
<template>
<div>
<!-- 使用插值 -->
<ul>
<li v-for="todo in todos">{{ todo.title }}</li>
</ul>
<!-- 使用 v-text -->
<ul>
<li v-for="todo in todos" v-text="todo.title"></li>
</ul>
</div>
</template>
<script>
export default {
data() {
return {
todos: [
{ id: 1, title: '做一些事情' },
{ id: 2, title: '做其他事情' }
]
}
}
}
</script>
v-for
可以通過以下方式提供索引:
<li v-for="(todo, index) in todos"></li>
事件
v-on
允許你監聽 DOM 事件,並在事件發生時觸發一個方法。這裡我們監聽點擊事件:
<template>
<a v-on:click="handleClick">點擊我!</a>
</template>
<script>
export default {
methods: {
handleClick: function() {
alert('測試')
}
}
}
</script>
你可以向任何事件傳遞參數:
<template>
<a v-on:click="handleClick('測試')">點擊我!</a>
</template>
<script>
export default {
methods: {
handleClick: function(value) {
alert(value)
}
}
}
</script>
並且可以在模板中直接放入一小段 JavaScript(單個表達式):
<template>
<a v-on:click="counter = counter + 1">{{counter}}</a>
</template>
<script>
export default {
data: function() {
return {
counter: 0
}
}
}
</script>
click
只是一種事件。常見的事件是 submit
,你可以使用 v-on:submit
進行綁定。
v-on
如此常見,因此它還有一種簡略語法 @
:
<a v-on:click="handleClick">點擊我!</a>
<a @click="handleClick">點擊我!</a>
有關
v-on
的更多詳細信息,請參見Vue 事件
顯示或隱藏
你可以選擇僅當 Vue 實例的特定屬性求值為 true 時,顯示 DOM 中的元素,使用 v-show
:
<p v-show="isTrue">某物</p>
該元素仍然被插入到 DOM 中,但如果條件不滿足,它的 display
設置為 none
。
事件指令修飾符
Vue 提供了一些可選的事件修飾符,你可以與 v-on
一起使用,它們可以自動在事件處理程序中執行某些操作,而不需要顯式編寫。
一個很好的例子是 .prevent
,它自動在事件上調用 preventDefault()
。
在這種情況下,表單不會導致頁面重新加載,這是默認行為:
<form v-on:submit.prevent="formSubmitted"></form>
其他修飾符包括 .stop
、.capture
、.self
、.once
、.passive
,可以在官方文檔中詳細說明。
自定義指令
Vue 默認的指令已經可以讓你完成很多工作,但如果你想要,你可以始終添加新的自定義指令。
如果你對此感興趣,請閱讀https://vuejs.org/v2/guide/custom-directive.html以了解更多信息。