背景介紹:外派到泰康做項目。這個項目中有個選擇組織的功能,是一個樹樁結構的懶加載,於是我就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([]);
}
}
}