# 跨層級資料傳遞 provide
## ==多層級資訊傳遞==
* 在外層加入 provide
* 內層元件補上 inject
==provide== 也非常適用表單驗證上面
在最外層的元件中 加上 provide
```javascript=
// 外層元件
const app = Vue.createApp({
data() {
return {
user: {
name: '小明',
uuid: 78163
}
}
},
// 加上 provide 物件方式
provide: {
user: {
name: '小明',
uuid: 78163
},
}
})
```
在內層元件 components 賦予 userComponent最內層變數
```javascript=
// 內層元件
app.component('card', {
data() {
return {
title: '文件標題',
content: '文件內文',
toggle: false
}
},
components: {
// 對應最內層的元件
userComponent
},
template: `
<div class="card" style="width: 18rem;">
<div class="card-body">
<userComponent></userComponent>
</div>
</div>
`,
});
```
最內層元件使用 **inject** 接收 **provide** 對應的屬性
```javascript=
//最內層元件
const userComponent = {
template: `<div>
{{ user.name }}
{{ user.uuid }}
</div>`,
// 使用inject , 接收對應provide 屬性
inject:['user'],
created() {
console.log(this.user);
// 如果根元件沒有使用 function return 則不能使用響應式
// this.user.name = '杰倫'
}
}
```
<div class="alert alert-danger text-center"> 如果中間內層需要傳遞的話,需要也使用inject 來做接收 </div>
```javascript=
components: {
// 對應最內層的元件
userComponent
},
// 內層也須加上 inject
inject:['user'],
```
## ==注意事項:響應式==
如果根元件沒有使用 function return 則不能使用響應式,provide需改成函式方式做處裡
```javascript=
// 外層元件
const app = Vue.createApp({
data() {
return {
user: {
name: '小明',
uuid: 78163
}
}
},
// provide 改成函式方式
provide(){
return {
user : this.user
}
}
})
```
{"metaMigratedAt":"2023-06-16T10:52:02.870Z","metaMigratedFrom":"YAML","title":"跨層級資料傳遞 provide","breaks":true,"contributors":"[{\"id\":\"c05b36ac-d774-4e45-8fc3-5e50c9be5123\",\"add\":1708,\"del\":38}]"}