前端小记--3.接上篇,级联组件el-cascader回显问题

在使用el-cascader这个级联组件时,组件的值是数组形式,且选中节点时,所返回的值中是包含选中节点的所有父节点的。

比如,我们选中的是“值班点1号-东门”,但组件实际的值是[‘值班点1号’,‘值班点1号-东门’],包含了上级父节点。这与后端接口就不匹配,一般后端存储的时候,只存储选中节点,返回数据也是只有选中的节点,这就导致数据回显问题。
前端小记--3.接上篇,级联组件el-cascader回显问题_第1张图片
此时,我们就要传给后端所选节点的数组,回显时就需要前端手动处理,根据给定的节点id,来查找其所有父节点id,以此实现页面数据回显。

1.获取所有所选节点,传给后端存储

let checkedNodes = this.$refs.checkCascader.getCheckedNodes() || [];
let checkedIds = checkedNodes.map((el) => {
    return el.value;
});
console.log('所有选中节点的id', checkedIds);

2.后端返回数据,前端进行处理回显

for (let item of self.editForm.checkpoints) {
    checkpoints.push(
	this.getParentIdsList(item, this.checkpointTree));
}
//回显打卡点数据
this.checkpoints = checkpoints;
//根据id递归查找所有父级ids
getParentIdsList(id, tree) {
      let arr = [];
      for (let i = 0; i < tree.length; i++) {
        let item = tree[i];
        arr = [];
        arr.push(item.checkpoint.id);
        if (id === item.checkpoint.id) {
          return arr;
        } else {
          if (item.children && item.children.length > 0) {
            arr = arr.concat(this.getParentIdsList(id, item.children));
            if (arr.includes(id)) {
              return arr;
            }
          }
        }
      }
    }

你可能感兴趣的:(前端,前端,vue.js,elementui,算法)