Vue 子组件使用 this.$parent 无法调用父组件中的方法

this.$parent 无法调用父组件中的方法

1. 遇到的问题

在开发 Vue 项目中,遇到了一个这样的问题:

其中UI框架使用的是iview UI , 在子组件中利用 this.$parent.getList() 调用父组件中的 getList() 方法, 发 现调用不到该方法, 然后通过 this.$parent.$parent.getList() 就可以调用到

2. 分析

在子组件中打印 this.$parent,通过控制台的打印,发现打印出来的 this.$parent 并不是该组件的父组件,而是iView UI的组件,原来是我在父组件引用子组件的时候还在外面套了一层 UI 组件导致的

<template>
	<Content>
	  <div>列表</div>
	  <open-modal></open-modal>
	</Content>
</template>

3. 解决

将父组件中的子组件移到 UI 组件外面,测试后发现可以正常调用 this.$parent.getList()

<template>
	<div>
		<Content>
		  <div>列表</div>
		</Content>
		<open-modal></open-modal>
	</div>
</template>

4. 总结

  1. 当我们使用第三方UI 框架而无法用 this.$parent 访问父组件的时候,如果非要考虑使用 $parent ,我们可以考虑多写几个 .$parent 直到找到你想要的那个父组件为止。
  2. 而且vue官方文档明确告诉我们, 要有节制的使用 $parent$children,他们主要的目的是作为访问组件的应急方法。更推荐使用 props$emit 来实现父子组件之间的通信。
  • 12
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值