---
# System prepended metadata

title: v-bind
tags: [Vue 實戰班]

---

---
tags: Vue 實戰班
---

# v-bind

官方文件：https://cn.vuejs.org/api/built-in-directives.html#v-bind
縮寫：`:`

說明：動態地綁定 HTML 屬性，將資料傳遞到元素上。

## 動態屬性

- `:` 是 v-bind 的縮寫
- v-bind 可以使用各種 JS 的表達式
- 可以傳入 data 內的資料

```html
<img v-bind:src="imageSrc">
<!-- 縮寫 -->
<img :src="imageSrc">
<img :src="'/path/to/images/' + fileName">
```

範例重點：

- input 中可以使用 `:value` 動態屬性傳入 data 內的值或是任何 JS 表達式的結果
- `:src` 也同樣道理可傳入 data 內的網址來呈現圖片 

<iframe height="300" style="width: 100%;" scrolling="no" title="Vue 動態屬性" src="https://codepen.io/Wcc723/embed/rNEydVR?default-tab=html%2Cresult" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
  See the Pen <a href="https://codepen.io/Wcc723/pen/rNEydVR">
  Vue 動態屬性</a> by Casper (<a href="https://codepen.io/Wcc723">@Wcc723</a>)
  on <a href="https://codepen.io">CodePen</a>.
</iframe>



## 綁定 Class

綁定樣式，參考文件 [Class 与 Style 绑定](https://cn.vuejs.org/guide/essentials/class-and-style.html#class-and-style-bindings)
可以透過 :class 的物件綁定並動態切換 Class，物件的屬性為 className，後方的值是表達式結果，如果為真值則會套用該 className。

範例重點：

- `:class` 可以使用動態切換 className
- `"{rotate: isTransform}"` 物件中的前者為 className 名稱，後者為判斷式，當為真值時則啟用前者的 className
- 可以透過動態切換 `isTransform` 的 `true` or `false` 來決定是否套用 `rotate`

<iframe height="300" style="width: 100%;" scrolling="no" title="綁定樣式-1" src="https://codepen.io/Wcc723/embed/XWLMEbQ?default-tab=html%2Cresult" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
  See the Pen <a href="https://codepen.io/Wcc723/pen/XWLMEbQ">
  綁定樣式-1</a> by Casper (<a href="https://codepen.io/Wcc723">@Wcc723</a>)
  on <a href="https://codepen.io">CodePen</a>.
</iframe>

綁定的物件也不需要撰寫在模板內，在 data 內定義同樣可運作：

範例重點：

- 同樣的邏輯也可直接寫於 data 內，優點是可以同時定義更多的 className 而不造成 HTML 的混亂


<iframe height="300" style="width: 100%;" scrolling="no" title="綁定樣式-2" src="https://codepen.io/Wcc723/embed/ExBWEjB?default-tab=html%2Cresult" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
  See the Pen <a href="https://codepen.io/Wcc723/pen/ExBWEjB">
  綁定樣式-2</a> by Casper (<a href="https://codepen.io/Wcc723">@Wcc723</a>)
  on <a href="https://codepen.io">CodePen</a>.
</iframe>

除此之外還可使用陣列操作，同時為同一個元素賦予多個樣式

範例重點：

- 如果傳入的是陣列，則可以直接啟用該 className
- 透過 checkbox 的切換，則可以操作陣列內的多個值，在 v-model 章節會另有介紹，在此可以專注 input 內的 **value** 即可

<iframe height="300" style="width: 100%;" scrolling="no" title="綁定樣式-3" src="https://codepen.io/Wcc723/embed/abgJYOe?default-tab=html%2Cresult" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
  See the Pen <a href="https://codepen.io/Wcc723/pen/abgJYOe">
  綁定樣式-3</a> by Casper (<a href="https://codepen.io/Wcc723">@Wcc723</a>)
  on <a href="https://codepen.io">CodePen</a>.
</iframe>


## 行內樣式

Style 也同樣可以使用動態屬性的方式傳入，但要特別注意 class 的名稱要使用小駝峰

範例重點：

- 可以透過 :style 的方式傳入樣式
- 傳入時，樣式的屬性名稱需要使用小駝峰的方式撰寫
- `{ backgroundColor: 'red' }` 前者為 CSS 的屬性，後者為該屬性的值

<iframe height="300" style="width: 100%;" scrolling="no" title="綁定樣式-4" src="https://codepen.io/Wcc723/embed/JjQWLYj?default-tab=html%2Cresult" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
  See the Pen <a href="https://codepen.io/Wcc723/pen/JjQWLYj">
  綁定樣式-4</a> by Casper (<a href="https://codepen.io/Wcc723">@Wcc723</a>)
  on <a href="https://codepen.io">CodePen</a>.
</iframe>
## 觀念動態屬性 VS 靜態屬性

此範例為觀念題，不需要操作：

- 動態屬性 VS 靜態屬性（ex:`:src` vs `src`）
- 靜態屬性
    - 無法進行運算
    - 型別一律是字串
- 動態屬性
    - 可以傳入任何表達式結果，如：
        - true, false vs 'true'
        - 1 vs '1'
    - 可以傳入 Vue 的 data



<iframe height="300" style="width: 100%;" scrolling="no" title="Vue 動態屬性 VS 靜態屬性" src="https://codepen.io/Wcc723/embed/qBzroOE?default-tab=html%2Cresult" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
  See the Pen <a href="https://codepen.io/Wcc723/pen/qBzroOE">
  Vue 動態屬性 VS 靜態屬性</a> by Casper (<a href="https://codepen.io/Wcc723">@Wcc723</a>)
  on <a href="https://codepen.io">CodePen</a>.
</iframe>