---
tags: Javascript, Vue
---
# Vue點擊顯示不同的component
## 環境
`"vue": "^2.6.14"`
## 範例
### 建立組件
假如說有A,B,C三個組件
```javascript=
import Aexample from "./components/Aexample.vue";
import Bexample from "./components/Bexample.vue";
import Cexample from "./components/Cexample.vue";
Vue.component("a-example", Aexample);
Vue.component("b-example", Bexample);
Vue.component("c-example", Cexample);
```
### 動態組件
#### vue2
```vue=
<component v-bind:is="componentName"></component>
```
#### vue3
```vue=
<div v-is="componentName"></div>
```
### 點擊切換組件
在Html中利用點擊切更換`currentComponent`變數,賦予給`component`的`tag`,預設情況下會先顯示`a-example`的組件,隨使用者點擊會切換不同的組件
```htmlembedded=
<div id="app">
<nav class="nav nav-pills nav-fill mb-3 align-items-center">
<a class="nav-link btn btn-outline-primary" data-toggle="tab" :class="{ active : currentComponent == 'a-example' }" href="#" @click="currentComponent = 'a-example'">A</a>
<a class="nav-link btn btn-outline-primary" data-toggle="tab" :class="{ active : currentComponent == 'b-example' }" href="#" @click="currentComponent = 'b-example'">B</a>
<a class="nav-link btn btn-outline-primary" data-toggle="tab" :class="{ active : currentComponent == 'c-example' }" href="#" @click="currentComponent = 'c-example'">C</a>
</nav>
<div class="tab-content p-5">
<div class="tab-pane fade show active" id="detect-class">
<component :is="currentComponent"></component>
</div>
</div>
</div>
<script>
const app = new Vue({
el: "#app",
data: {
currentComponent: 'a-example', // name of your component
},
});
</script>
```
### prop資料
當然如果有需要props的資料也可以
`<component :is="currentComponent" v-bind:variable="variable"></component>`
### 後計
也可以將組件組成陣列的方式
```javascript=
const app = new Vue({
el: "#app",
data: {
currentComponent: 'a-example', // name of your component
list: [{'name': 'A範例', 'componentName': 'a-example'}, {'name': 'B範例', 'componentName': 'b-example'}, {'name': 'C範例', 'componentName': 'c-example'}]
},
});
```
利用`v-for`循環將`a tag`顯示
```htmlmixed=
<a class="nav-link btn btn-outline-primary"
data-toggle="tab"
:class="{ active : currentComponent == value.componentName }"
href="#"
@click="currentComponent = value.componentName"
v-for="(value, index) in list" :key=value.name>{{ value.name }}</a>
```