本文開始,首先我們來看這兩個詞的意思,provide:提供 inject:註入 用處: 父組件可以向其所有子組件傳入數據,而“不管子組件層次結構有多深(非父子和父子咱都能傳)” 特性: 父組件有一個provide選項來提供數據 子組件有一個inject選項來開始使用這個數據 本文參考組件層級: In ...
本文開始,首先我們來看這兩個詞的意思,provide:提供 inject:註入
用處:
父組件可以向其所有子組件傳入數據,而“不管子組件層次結構有多深(非父子和父子咱都能傳)”
特性:
父組件有一個provide選項來提供數據
子組件有一個inject選項來開始使用這個數據
本文參考組件層級:
Index組件
\ A組件
\ B組件
代碼區:
場景1:我想要Index組件直接給b組件傳值
Index組件代碼:
<template> <div> <div>我是index組件</div> <A></A> </div> </template> <script> import A from '@/components/A.vue' export default { components: { A }, data() { return {} }, provide: { text: '我是父組件的provide信息666' } } </script> <style></style>
接收的B組件代碼:
<template> <div> <div>我是B組件</div> <div>{{ msg }}</div> </div> </template> <script> export default { name: 'B', data() { return { msg: this.text } }, inject: ['text'] } </script> <style></style>
當然,provide還有第二種寫法,寫成函數的形式
Index組件代碼:
<template> <div> <div>我是index組件</div> <A></A> </div> </template> <script> import A from '@/components/A.vue' export default { components: { A }, data() { return { arr: ['1', '2', '3'] } }, // provide: { // text: '我是父組件的provide信息666' // } provide() { return { arr: this.arr } } } </script> <style></style>
B組件代碼:
<template> <div> <div>我是B組件</div> <div>{{ msg }}</div> <ul v-for="(item, index) in arr" :key="index"> <li>{{ item }}</li> </ul> </div> </template> <script> export default { name: 'B', data() { return { msg: this.text } }, inject: ['arr'] } </script> <style></style>
運行截圖:
對比:
如果使用常見的props方式傳值需要:index->a->b
如果使用provide/inject方式傳值:index->a index->b
本文如有錯誤,還望各位批評指針,希望能幫助到大家更好的理解vue的provide和inject