在Vue中,向上通信(从孙子到爷爷)的常用方法有以下几种:
- 使用
$parent
访问父组件,再使用$parent
访问爷爷组件,调用其方法。 - 使用
$root
访问根组件,再使用深度优先搜索遍历其子孙组件,找到爷爷组件,调用其方法。 - 使用Vue实例的
provide()
和inject()
方法,在爷爷组件中提供一个函数或对象,让孙子组件使用inject()
获取爷爷组件中的属性或方法,间接调用其方法。
下面简单介绍这三种方法的使用。
- 使用
$parent
在孙子组件中使用$parent
访问父组件,再使用$parent
访问爷爷组件,调用其方法。示例代码如下:
<!-- 爷爷组件 -->
<template>
<div>
<father @callGrandfather="callBack"></father>
</div>
</template>
<script>
export default {
methods: {
callBack() {
console.log('爷爷的方法');
}
}
};
</script>
<!-- 父组件 -->
<template>
<div>
<son :callGrandfather="callBack"></son>
</div>
</template>
<script>
export default {
methods: {
callBack() {
this.$emit('callGrandfather');
}
},
components: {
'son': {
template: '<div><button @click="callBack">调用爷爷的方法</button></div>',
props: ['callGrandfather'],
methods: {
callBack() {
this.$parent.$parent.callBack();
}
}
}
}
};
</script>
- 使用
$root
在孙子组件中使用$root
访问根组件,再使用深度优先搜索遍历其子孙组件,找到爷爷组件,调用其方法。示例代码如下:
<!-- 爷爷组件 -->
<template>
<div>
<father @callGrandfather="callBack"></father>
</div>
</template>
<script>
export default {
methods: {
callBack() {
console.log('爷爷的方法');
}
}
};
</script>
<!-- 父组件 -->
<template>
<div>
<son :callGrandfather="callBack"></son>
</div>
</template>
<script>
export default {
methods: {
callBack() {
this.$emit('callGrandfather');
}
},
components: {
'son': {
template: '<div><button @click="callBack">调用爷爷的方法</button></div>',
props: ['callGrandfather'],
methods: {
callBack() {
let grandfather = this.$root.$children.find(item => item.$options.name === 'Grandfather');
grandfather.callBack();
}
}
}
}
};
</script>
- 使用
provide()
和inject()
在爷爷组件中使用provide()
提供一个函数或对象,让孙子组件使用inject()
获取爷爷组件中的属性或方法,间接调用其方法。示例代码如下:文章来源:https://www.toymoban.com/news/detail-615054.html
<!-- 爷爷组件 -->
<template>
<div>
<father :data="data"></father>
</div>
</template>
<script>
export default {
provide() { // 在爷爷组件中提供一个方法
return {
data: '爷爷的数据',
callBack: this.callBack
}
},
methods: {
callBack() {
console.log('爷爷的方法');
}
}
};
</script>
<!-- 父组件 -->
<template>
<div>
<son></son>
</div>
</template>
<script>
export default {
inject: ['data', 'callBack'], // 在孙子组件中注入方法
components: {
'son': {
template: '<div><button @click="callBack">调用爷爷的方法</button></div>',
methods: {}
}
}
};
</script>
注:这里提供的只是几种可能的方法,具体使用要根据实际情况选择。
vue3.0照例只是写法改变文章来源地址https://www.toymoban.com/news/detail-615054.html
到了这里,关于在Vue中,向上通信(从孙子到爷爷)的常用方法有以下几种:的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!