vue父子组件如何实现跨层级调用
参考: https://segmentfault.com/a/1190000018563193
provide 、inject
provide / inject 是 Vue 在 2.2.0 版本后新增的 API。
这对选项需要一起使用,以允许一个祖先组件向其所有子孙后代注入一个依赖,不论组件层次有多深,并在起上下游关系成立的时间里始终生效。 也就是在父组件中提供一个值,并且在需要使用的子孙组件中注入改值,即:
// Parent.vue export default { // 提供可注入子组件属性 provide() { return { // 向子组件中注入方法 routerRefresh: this.reloadRouter // 向子组件中注入数据 name: Stone } }, methods:{ reloadRouter() { // 局部刷新整路由页面 // 先移除组件 this.refresh = false // 在组件移除后,重新渲染组件 // this.$nextTick可实现在DOM 状态更新后,执行传入的方法。 this.$nextTick(() => { this.refresh = true }) }, } } // Child.vue export default { // 接收注入的数据 inject: [ routerRefresh, name ], mounted() { console.log(this.name) }, methods:{ callParentsMethod(){ this.routerRefresh() } } }
不仅仅是 Child.vue ,只要是 Parent.vue 的子组件,无论隔多少代,都可以通过这个的方式注入。 这种多级组件透传的方式可以保证单向数据流的清晰性,例如像用户信息这样的全局信息,就可以借助这两个 API 来完成,而没有引入第三方库 vuex。子组件可以直接调用父组件或祖先父组件的方法或数据。
下一篇:
群发外贸邮箱哪个好?外贸人的邮箱选择?