昨天我們介紹了 JS 表達式如何在 Vue 綁定,今天一起來看一下「指令」怎麼實現這樣的功能吧!粗淺的帶大家一起走過幾個語法的小小應用~
指令?
官方文件以這張圖,說明了「指令」的主要組成:「名稱」、「屬性」、「修飾符」和「值」。
v- 開頭這類的名稱。我們接著看下去!
記得之前有提過的 v-html、v-bind 嗎?這種以 v- 為開頭的特殊屬性就是「指令」。
而 Vue 提供了許多內建指令可以使用,讓我們可以用 JS 表達式與之綁定(官方文件:有少數幾個例外)。
官方文件:
<p v-if="seen">Now you see me</p>v-if指令的功能是:會基於綁定的「表達式的值」的「真/假」來決定是否插入元素。
也就是說:v-if 會去判斷 seen 這段 JS 表達式的「值」,是 true 就顯示,false 就不顯示。
我們可以試試看這樣寫:
<template>
  <p v-if="truthyValue">Here is a "truthy value" of v-if example.</p>
  <p v-if="falsyValue">Here is a "falsy value" of v-if example.</p>
</template>
<script setup>
const truthyValue = 123;
const falsyValue = "";
</script>
這邊做了什麼:
v-if 指令綁定的 <p> 元素。123,123 是真值,所以這段 <p> 會顯示。"","" 是假值,所以這段 <p> 不會顯示。瀏覽器上會看到:
某些指令會需要帶參數,例如 v-bind、v-on。
官方文件:某些指令會需要一個“參數”,在指令名後通過一個冒號隔開做標識。
例如用
v-bind指令來響應式地更新一個 HTML 屬性:<a v-bind:href="url"> ... </a>
簡寫:<a :href="url"> ... </a>
這裡href就是一個參數,它告訴v-bind指令將表達式url的值綁定到元素的href屬性上。
我們可以試試看這樣寫:
<template>
  <img :src="imagePath" />
</template>
<script setup>
const imagePath = "src/components/day10/images/Jerry_dating.jpg";
</script>
<style>
img {
  width: 300px;
}
</style>
這邊做了什麼:
v-bind 指令,把 src 屬性綁定成 imagePath 這個參數。: 前的字去掉)。imagePath 這個參數的定義保持同步。瀏覽器上會看到:
那今天 imagePath 的值若改了!
<script setup>
const imagePath = "src/components/day10/images/Jerry_watching.jpg";
</script>
圖片就會換拉(好 Q)
而我們也可以綁定「JS 表達式」作為指令的「動態參數」。
官方文件:同樣在指令參數上也可以使用一個 JavaScript 表達式,需要包含在一對方括號內
範例:<a v-bind:[attributeName]="url"> ... </a>
而動態參數有些限制需要注意:
<a :['foo' + bar]="value"> ... </a>
<button v-on:[eventName]="doSomething">Click Me!!!!</button>
</template>
<script setup>
const eventName = "click";
const doSomething = () => {
  console.log(`You are the BEST`);
};
</script>
我們做了什麼事:
v-on 指令綁定屬性 eventName,將其用 [] 括起來,它是一個會被以 JS 表達式解析的動態屬性。eventName 定義為 "click"(字串)。eventName 的值為 doSomething:會印出 You are the BEST。我們來點點看按鈕!
小叮嚀!動態參數值需要為「字串」,沒有遵循的話會報錯:
官方文件:修飾符是以點開頭的特殊後綴,表明指令需要以一些特殊的方式被綁定。例如
.prevent修飾符會>告知 v-on 指令對觸發的事件調用 event.preventDefault():
<form @submit.prevent="onSubmit">...</form>
官方文件在這稍微淺淺帶過了修飾符的功能,說之後會再講到(不是我鬼混喔
正式宣布!Vue 模板語法的初步認識已經告一段落啦(西呀哇ㄙㄟ)
上目錄!方便搭家隨時穿越回去溫習:
明天一起來解鎖下個新的章節嚕!(是⋯⋯傳說中的 ref 喔⋯⋯)
https://github.com/Jamixcs/2024iThome-jamixcs/tree/main/src/components/day10