provide 和 inject 是成對出現的:
provide: 父級(或者更外層的組件)組件 提供的可供子組件(或這更內層組件)注入的屬性;
而不必這個內層組件處於什么層級;
inject: 內層組件可注入的屬性(屬性由外層組件提供),是內層組件可直接訪問外層組件的某個屬性或方法,而不必暴漏整個實例;
不必知道這個注入屬性是由哪外層組件暴漏的;
共同點: 注入屬性和props類似,都是通過顯示聲明的;
這對選項需要一起使用,以允許一個祖先組件向其所有子孫后代注入一個依賴,不論組件層次有多深,並在起上下游關系成立的時間里始終生效。如果你熟悉 React,這與 React 的上下文特性很相似。
使用場景:
provide 和 inject 主要在開發高階插件/組件庫時使用。並不推薦用於普通應用程序代碼中。
參考:
https://cn.vuejs.org/v2/api/#provide-inject
https://cn.vuejs.org/v2/guide/components-edge-cases.html#%E4%BE%9D%E8%B5%96%E6%B3%A8%E5%85%A5
1 // 父級組件提供 'foo' 2 var Provider = { 3 provide: { 4 foo: 'bar' 5 }, 6 // ... 7 } 8 9 // 子組件注入 'foo' 10 var Child = { 11 inject: ['foo'], 12 created () { 13 console.log(this.foo) // => "bar" 14 } 15 // ... 16 } 17 18 19 // 使用一個注入的值作為一個屬性的默認值: 20 const Child = { 21 inject: ['foo'], 22 props: { 23 bar: { 24 default () { 25 return this.foo 26 } 27 } 28 } 29 } 30 31 // 使用一個注入的值作為數據入口: 32 const Child = { 33 inject: ['foo'], 34 data () { 35 return { 36 bar: this.foo 37 } 38 } 39 } 40 41 // 與 prop 的默認值類似,你需要對非原始值使用一個工廠方法: 42 const Child = { 43 inject: { 44 foo: { 45 from: 'bar', 46 default: () => [1, 2, 3] 47 } 48 } 49 }
