---
# System prepended metadata

title: chapter 2 | Vue.js 的元件系統

---

# chapter 2 | Vue.js 的元件系統
## 1. vue 使用的元件，相較於傳統方法的優點是什麼?
每一個被封裝後的元件單元，都含有自己的模板、樣式，與行為邏輯，並且可以被重複使用。 而在元件之中又可以含有元件，這樣由一個個元件單元組合而成的「元件樹」。
## 2. 請介紹 vue 常見的四種元件類型?

### 展示型元件 (Presentation)
負責呈現 UI 為主，提升 UI 的重複使用性

### 容器型元件 (Container)
責與資料層的 service 溝通

### 互動型元件 (Interactive)
通常會包含許多的互動邏輯在裡面，但也與展示型元件同樣強調重複使用。

### 功能型元件 (Functions)
身不渲染任何内容，主要負責將元件內容作為某種應用的延伸，或是某種機制的封裝。

## 3. 檔案 .vue 的用途是什麼? 怎麼使用？
將某個元件以 ```.vue``` 檔案的方式包裝起來，再透過 ```import``` 的方式將這個檔案引入作為子元件， 這個 ```.vue``` 檔案通常我們將它稱為 Vue 的單一元件檔 (Single File Components, SFC)。

在這個元件中，它的模板、樣式以及邏輯應該要是高度耦合的，可以讓元件變得更易於管理，並提高可維護性。

## 4. props 屬性的用途是什麼?
上下層元件之間，若需要從外部引進資料時，就需要透過 ```props``` 屬性來引用外部的狀態。

## 5. 請解釋 vue.js 資料的雙向綁定?
```v-model``` 會針對 Vue 實體內的狀態 (```data```) 與畫面上表單元素 (如 ```input``` 等) 進行綁定， 當表單元素的 ```value``` 被更新的時候，Vue.js 就會直接反映至實體對應的狀態。

## 6. 請解釋 vue 口訣 「props in event out」 的意義?
父層資料透過 ```props``` 傳入子層，而子層透過 ```event``` 來觸發父層狀態的更新。


## 7. 什麼是元件的編譯作用域?
如同多數程式語言都有變數作用範圍 (scope) 的概念，編譯作用域可以將它想像成是「元件的 scope」。以底下的程式做範例 (出自本書) :
``` HTML
<div id="app">
  <h1>{{ msg }}</h1>

  <custom-component>
  <!-- 大多數情況下，這裡放任何內容都是無意義的 -->
    {{ msg }}
  </custom-component>
</div>
```
component的msg會被外層的msg覆蓋掉

## 8. 請問 vue 中，如何做透明色的漸變動畫？
``` HTML
<div id="app">
  <button @click="isShow =! isShow">Toggle</button>

  <div class="mode">
    <label><input v-model="mode" type="radio" value="in-out"> in-out</label>
    <label><input v-model="mode" type="radio" value="out-in"> out-in</label>
  </div>

  <div>
    <transition name="fade" :mode="mode">
      <div class="block" v-if="isShow">Block 1</div>      <div class="block" v-else>Block 2</div>
    </transition>
  </div>

</div>
```

# -----------------------------------------

## 心得
雖然還不夠成熟，但每一次的學習使我成長。我不僅了解與學會如何處理元件之間的互動、管理和編譯，還知曉了如何讓他們活起來。