vue 2.2.0新增了 provide \ inject功能。
官网提示:provide 和 inject主要为高阶插件/组件库提供用例,并不推荐直接用于应用程序代码中。
这对选项需要一起使用,以允许一个祖先向其所有子孙后代注入一个依赖,不论组件层次有多深,并在起上下游关系成立的时间里始终生效。这里与react的上下文特性很相似。
注意:这个provide提供的数据正常来说是不会自动更新的,但是如果传递的参数是已监听的对象也是可以做到实时更新的。
//Parent.vue <template> <div class="box"> <p>发给child的modelMSG: {{modelMSG.msg}}</p> <p> 修改modelMSG: <input type="text" v-model="modelMSG.msg" /> </p> <Child :data.sync="modelMSG" /> </div> </template> <script> import Child from './Child' export default { name: 'Parent', components: { Child, }, provide() { return { data: this.modelMSG, } }, data() { return { modelMSG: { msg: '发给Child的modelMSG信息', }, name: 'Parent的名字', } }, } </script>
//Child.vue <template> <div class="hello"> <p class="red">来自Parent的value: {{data.msg}}</p> </div> </template> <script> export default { name: 'Child', inject: ['data'], } </script>