作用:
父子组件跨层级传递数据
优势:
解决了组件层级过多时,数据传递麻烦的问题
主要应用场景:
为高阶插件/组件库提供用例,不推荐在应用程序中使用
缺点:
数据追踪困难,不确定数据注入层,以及数据使用层
使用方法:
provide:
一个对象,或者是一个返回对象的函数。
对象内包含想要传递的内容,即属性和属性值
注意:
子孙层的provide 会覆盖 父辈 provide中相同key的属性值
inject:
字符串数组,或者一个对象。属性值可以为对象,包含from,default属性
from:
可用注入内容中的key值,即 provide 传入对象中的key
default:
默认值,取值不成功时候的备选。
example:
Vue.component('A', {
template: `
<div>
<B></B>
</div>
`,
provide: {
msg: 'msg from A',
ads: 'ads from A'
}
})
Vue.component('B', {
template: `
<div>
<C></C>
</div>
`,
provide: {
// 覆盖父组件A注入的msg内容
msg: 'msg from B'
}
})
Vue.component('B', {
template: `
<div>
<span>{{valueMsg}}</span>
<span>{{valueAds}}</span>
</div>
`,
inject: {
valueMsg: {
from: 'msg',
default: ''
},
valueAds: {
from: 'ads',
default: ''
}
}
})
运行结果:
msg from B
ads from A