比如一个A组件 有N个方法,它有一个孙组件C
有没有什么办法C组件里面可以调用A组件的所有方法?
首先this.$parent 去调用不太可取,因为不知道会嵌套多少层。
其次用 provide/inject 来传递 proxy或者ctx。 build打包后 proxy和ctx就没有了。好像也不行。
将A组件的方法一个个赋值给 provide 也不太行,因为方法有很多 目前有40多个方法了,还会持续增多
有没有其他办法,vue2 vue3 写法都行。
provide / inject
和满足你的需求,在A组件(有一个方法XX
)直接将this绑定给一个provide
变量parentProvide
(自定义的变量名),在孙组件C中通过this.parentProvide.XX()
就可以调用A组件的XX方法
父组件A
<template>
<div>
<h1>父组件</h1>
<div>{{ parentCount }}</div>
<button @click="parentCountChange">parentCount+1</button>
<Child />
</div>
</template>
<script>
import Child from "./child.vue";
export default {
components: { Child },
data() {
return {
parentCount: 0,
};
},
provide() {
return {
parentProvide: this,
};
},
methods: {
parentSayHello() {
console.log("parent Say Hello");
},
parentCountChange() {
this.parentCount++;
},
},
};
</script>
孙组件C
<template>
<div>
<h1>子或者孙组件或者父组件下更深的组件</h1>
<button @click="childGetParentThis">childGetParentThis</button>
</div>
</template>
<script>
export default {
data() {
return {};
},
inject: ["parentProvide"],
created() {
this.childGetParentThis();
},
methods: {
childGetParentThis() {
console.log("parentCount", this.parentProvide.parentCount);
this.parentProvide.parentSayHello();
},
},
};
</script>
<style></style>
https://cn.vuejs.org/v2/api/#provide-inject
Vue 子组件调用父组件的所有方法
https://blog.csdn.net/chuziyan/article/details/122088972
子组件不论隔了多少组件调用顶层的组件所有的方法是通过this.$parent.顶层组件的方法即可
既然都要用,那直接另写个公共的js文件就好了啊
这种情况你还是用vuex吧