vue 父组件调用子组件内置方法

时间:2023-01-30 21:12:49

背景介绍:外派到泰康做项目。这个项目中有个选择组织的功能,是一个树桩结构的懒加载,于是我就element-ui的tree组件封装了一个公共的组件。

                  但是后来发现他们的公司组织结构不是都请求的同一个接口,于是想着组件里面给加个url参数就可以了。但是他们的人员说一些参数数据都不同,

                  非要我在请求接口时在每个页面的父组件分别调用。我想着你们不觉得麻烦我也OK啦。然后就遇到了需要在父组件调用子组件方法的问题。

tree组件有个load 方法,我们要做的是在父组件能调用这个方法,并将他的默认参数node和resolve传过去
<el-tree v-show="isShowTree" class="bgClFFF treeBox" ref="selectTree" :data="treeData" node-key="label" accordion :props="defaultProps" @node-click="handleNodeClick" :expand-on-click-node="false" lazy :load="loadNodeChild" :render-content="renderContent" ></el-tree>

解决的方法如下:

子组件props里定义一个方法,用于接受父组件传过来的方法 
props: { loadNode: { type: Function,
default: "" }, }
methods里子组件触发加载数据方法时,调用父组件的方法,并将参数传过去
 loadNodeChild(node, resolve) {
  this.loadNode(node, resolve);
 },
// 父组件调用
  <Tree
   @chooseNewNode = "getTreeNode"
   :treeData="treeData"
    :loadNode = "loadNode"
  >
  </Tree>
然后在父组件的methods里调用这个方法
  loadNode(node, resolve){
    if (this.isFirstLoad) {
     // 第一次加载的数据
      resolve(this.treeData);
      this.isFirstLoad = false;
    } else {
     // 根据node的id发送请求,resolve(后端返回的data数组)
    if (node.data.id == "50000075O") {
      resolve(this.loadData);
    } else {
     resolve([]);
    }
   }
  }