vue中在子组件使用this.$parent调用父组件的方法报错

问题:在项目中的子组件调用父组件的closeRankLoading()方法时遇到报错:
vue.runtime.esm.js:619 [Vue warn]: Error in v-on handler: "TypeError: this.$parent.closeRankLoading is not a function"

原因:原来是子组件在父组件调用布局时外层还套了两个其它element-ui组件,导致this.$parent只是到了上一层组件,并没有到达父组件

<template>
	<div>
	<el-row :gutter="20">
      <el-col :span="12">
        <ranking
          ref="ranking"
          :report-data="overViewData.report"
          :group-id="group_id"
          :loading="rankLoading"
        >ranking>
      el-col>
    el-row>
	div>
template>

在子组件打印this.$parent可见:
vue中在子组件使用this.$parent调用父组件的方法报错_第1张图片
解决:写成this.$parent.$parent.$parent.closeRankLoading()可以正常调用

另猜测:此情况下另一种调用方法this.$emit()报错也可能是同样原因

你可能感兴趣的:(element-ui,vue,vue)