提供/注入
对于一些深嵌套的组件,我们可以使用 provide 和 inject 。父组件可以作为其所有子组件的依赖项提供程序,而不管组件层次结构有多深。这个特性有两个部分:
- 父组件有一个 
provide选项来提供数据 provide: { msg: xxx } - 子组件有一个 
inject选项来开始使用这个数据 inject: [‘msg’] 
- 案例:
```javascript const app = Vue.createApp({}); app.component(“Father”, { template: “#father”, data() {<template id="son"><div>{{msg}}{{HongBao}}</div></template>
}, provide: {return {say: "这是我给我孙子的红包",};
} });msg: '这是我给我孙子的压岁钱',HongBao: 8888
 
app.component(“Son”, { template: “#son”, inject: [“msg”, “HongBao”], console.log(this.msg,this.HongBao) // ..的压岁钱,8888 使用{{msg}}、{{HongBao}}直接使用 });
// 其他组件… app.component(“Hra”, { template: “#hra”, }); app.component(“Hrb”, { template: “#hrb”, });
如果要访问实例property,我们需要将provide转换成返回对象的函数```javascriptapp.component("Father", {template: "#father",data() {return {say: "这是我给我孙子的红包",};},provide() {return{msg: this.say,HongBao:8888,}}});app.component("Son", {template: "#son",inject: ["msg", "HongBao"],console.log(this.msg,this.HongBao) // ..的红包,8888 使用{{msg}}、{{HongBao}}直接使用});
官方文档
这使我们能够更安全地继续开发该组件,而不必担心可能会更改/删除子组件所依赖的某些内容,这些组件之间的接口仍然是明确定义的,就像prop一样。
实际上,我们可以将依赖注入看作是”long range props”,除了:
- 父组件不需要知道哪些子组件使用它提供的property
 - 子组件不需要知道 
injectproperty来自那里 
