# Vue - 組件的 全局註冊 vs 局部註冊
## 全局註冊
### 在 main.js 中註冊組件:
```javascript=
// vue2
import Vue from 'vue'
import App from './App.vue'
/* -------------------------------- */
Vue.component('my-component-name', {
// ... option ...
})
/* -------------------------------- */
new Vue({
router,
store,
render: h => h(App)
}).$mount('#app')
```
or
```javascript=
// vue2
import Vue from 'vue'
import App from './App.vue'
/* -------------------------------- */
import my-component-name from 'component的.vue檔相對路徑'
Vue.component('使用時的標籤名稱', import的名稱)
/* -------------------------------- */
new Vue({
router,
store,
render: h => h(App)
}).$mount('#app')
```
### 在任何 .vue 中使用:
```htmlmixed=
<div id="demo">
<my-component-name></my-component-name>
</div>
```
特性:
- 全局註冊的行為必須在根 Vue 實例 (通過 new Vue) 創建之前發生
- 可以用在任何新創建的 Vue 根實例 (new Vue) 的模板中,在所有子組件中也可以使用
- 全局註冊所有的組件意味著即便你已經不再使用一個組件了,它仍然會被包含在你最終的構建結果中。這造成了用戶下載的 JavaScript 的無謂的增加。
:::warning
### Vue 3.0 開始不再提供功能的全局註冊,而是註冊在根元件實體上
```javascript=
// vue3
import { createApp } from 'vue'
import App from './App.vue'
// createApp(App).mount('#app')
const app = createApp(App)
/* -------------------------------- */
app.component('my-component-name', {
// ... option ...
})
/* -------------------------------- */
```
or
```javascript=
// vue3
import { createApp } from 'vue'
import App from './App.vue'
import my-component-name from 'component的.vue檔相對路徑'
// createApp(App).mount('#app')
const app = createApp(App)
/* -------------------------------- */
app.component('my-component-name', {
// ... option ...
})
/* -------------------------------- */
```
:::
## 局部註冊
#### 方法一:在同一個.vue創建與使用
在同一個 .vue 中使用組件:
```htmlmixed=
<div id="demo">
<my-component-name></my-component-name>
</div>
```
在同一個 .vue 中註冊組件:
```javascript=
var ComponentA = { /* ... */ }
new Vue({
el: '#demo',
components: {
'component-a': ComponentA,
}
})
```
在 子組件 ComponentB 局部註冊 ComponentA :
```javascript=
var ComponentA = { /* ... */ }
var ComponentB = {
components: {
'component-a': ComponentA,
},
// ...
}
new Vue({
el: '#demo',
components: {
'component-b': ComponentB,
}
})
```
#### 方法二:在不同的.vue創建與使用
通過 Babel 和 webpack 使用 ES2015 模塊系統 ( import / require ) :
```javascript=
import ComponentA from './ComponentA.vue'
export default {
components: {
'componentA': ComponentA,
//or
ComponentA, // object-shorthand
},
// ...
}
```
> [Vue組件全局/局部註冊](https://www.itread01.com/content/1548157085.html)
>[Vue 2.x 至 3.0 快速升級指南](https://book.vue.tw/appendix/migration.html)
###### tags: `Vue`