最近在开发的时候,有个选择组织的需求,并且有搜索的功能;搜索结果出来后需要重置整个el-tree的数据,这时发现不知道怎么重置数据我擦。。 写个帖子记录一下解决方法,这里用了个最简便的方式完成的
- 组件初始效果:
- 输入关键字搜索后的效果:
上代码!!
HTML代码:
<el-row>
<el-col :span=19>
<el-input placeholder="请输入关键字进行过滤" v-model="filterText" @input="searchValInput"></el-input>
</el-col>
<el-col :span="4" :offset="1" v-if="showSubDistrict">
<el-checkbox v-model="subDistrict">包含下级</el-checkbox>
</el-col>
</el-row>
<div class="down-tree">
<el-tree
class="filter-tree"
:props="defaultProps"
node-key="id"
:check-strictly="true"
:show-checkbox="this.showCheckbox"
:filter-node-method="filterNode"
:default-checked-keys="defaultCheckKey"
:default-expanded-keys="expandedKeys"
@node-click="nodeSelected"
@check="nodeCheck"
@check-change="nodeCheckChange"
lazy
:load="loadNode"
ref="myTree">
<span class="custom-tree-node" slot-scope="{ node, data }">
<span v-if="data.disabled" style="color: #c8c0c0;cursor: not-allowed;">{{ data.name }}</span>
<span v-else >{{ data.name }}</span>
</span>
</el-tree>
</div>
JS代码:
searchValInput: debounce(function(val) {
console.log("搜索关键字::::: ", val)
// 1. 获取树的store数据
let { nodesMap } = this.$refs.myTree.root.store;
// 2. 调用搜索接口获取结果
let data = {name: val}
orgTree(this.pick, data).then(res=>{
if(res.data && res.success) {
// 3. 清空store数据
nodesMap = {};
// 4. 重新赋值
this.$refs.myTree.root.setData(res.data);
}
})
}, 1000),