• elementui 的CascaderPanel级联面板类型 懒加载 回显


    这个问题只出现在CascaderPanel级联面板上,级联的input不会有这个问题

    1.CascaderPanel级联面板的显示,懒加载,都正常,到了编辑回显的时候,却死活只能显示到二级就报错了,

     原始代码

     html

    1 <el-cascader-panel
    2        v-model="cascaderVal"
    3       ref="cascader"
    4       class="full-width"
    5       @change="handleCascaderChange"
    6       @active-item-change="handleCascaderItemChange"
    7        :props="props"
    8 ></el-cascader-panel>

    js

      1 data(){
      2    let this_ = this;
      3    return{
      4           isEdit: false,  
      5           showData: {
      6             modName: '',
      7             instanceName: '',
      8             actionName: ''
      9           },
     10           moduleLists: [],
     11           instanceLists: [],
     12           actionLists: [],
     13           actionParams: {},
     14           actionRules: {},
     15           actionFormLoading: false,
     16           cascaderVal: [],
     17           resolve_: null,
     18           props: {
     19             lazy: true,
     20             lazyLoad(node, resolve) {
     21               setTimeout(() => {
     22                 this_.lozyLoad(node, resolve);
     23               }, 100);
     24             }
     25           },
     26     }  
     27 },
     28 methods:{
     29     //在新增的时候,不需要回显,在编辑的时候,回显数据
     30    init(row){
     31       this.$nextTick(() => { 33             let this_ = this;
              //v-model进行赋值,这个赋值,可以使得第一层面板进行回显
    34 this.cascaderVal = [row.moduleId, row.instanceId, row.actionId]; 35 setTimeout(() => { 36 /**这里是对二级的回显 操作,需要自己手动执行一下懒加载的请求*/ 37 this.lozyLoad({ level: 2, data: row }, this.resolve_, 'render'); 38 /**这里不可以用this.cascaderVal,因为在props中,我对cascader进行了清空,双向绑定的情况下,这个值会被情空 */ 39 // this.cascaderVal = [row.moduleId, row.instanceId, row.actionId]; 也不可以对其赋值,会导致cas面板报错 40 this.handleCascaderChange([row.moduleId, row.instanceId, row.actionId], 1); // 41 }, 1800); //这个时间小了也容易报错 42 /**解决第三级面板不回显高亮的问题,使用的是原生的方式回显,手动加class名称,之后点击的时候,再移除 */ 43 setTimeout(() => { 44 let liLists = Array.from(document.getElementsByClassName('el-cascader-node')); 45 liLists.forEach((item) => { 46 if (item.children[0].innerHTML == this.showData.actionName) { 47 // let str = `<i class="el-icon-check el-cascader-node__prefix"></i>${item.innerHTML}`; 48 item.className += ' in-active-path self-addclass'; 49 } 50 }); 51 }, 3000);//这个时间小了会获取不到三级面板
    53 }); 54 }, 55 async getModule() { 56 await reqSoarModule().then((res) => { 57 this.moduleLists = res.data; 58 }); 59 }, 60 async getInstance(id) { 61 await reqSoarInstance({ moduleId: id }).then((res) => { 62 this.instanceLists = res.data; 63 }); 64 }, 65 async getAction(id) { 66 await reqSoarAction({ instanceId: id }).then((res) => { 67 this.actionLists = res.data; 68 }); 69 }, 70 lozyLoad(node, resolve, type) { 71 let this_ = this; 72 this.resolve_ = resolve; 73 const { level, data } = node; 74 let nodes = []; 75 if (level >= 1) { 76 if (level == 1) { 77 this_.getInstance(data.moduleId).then(() => { 78 setTimeout(function() { 79 nodes = this_.instanceLists.map((item) => ({ 80 value: item.instanceId, 81 label: item.name, 82 leaf: level >= 2, 83 level: level, 84 ...item 85 })); 86 resolve(nodes); 87 }, 300); 88 }); 89 } else { 90 this_.getAction(data.instanceId).then(() => { 91 setTimeout(function() { 92 nodes = this_.actionLists.map((item) => ({ 93 value: item.actionId, 94 label: item.name, 95 leaf: level >= 2, 96 level: level, 97 ...item 98 })); 99 /**为了解决编辑回显时不能正常显示的问题 */ 100 if (!this_.isEdit || (this_.isEdit && type)) { 101 resolve(nodes); 102 } else {
                 //这一步可以解决报错
    103 this_.$refs.cascader.clearCheckedNodes(); 104 } 105 }, 300); 106 }); 107 } 108 } else { 109 if (!this_.moduleLists.length) { 110 this_.getModule().then(() => { 111 setTimeout(function() { 112 nodes = this_.moduleLists.map((item) => ({ 113 value: item.moduleId, 114 label: item.name, 115 level: level, 116 leaf: false, 117 ...item 118 })); 119 resolve(nodes); 120 }, 300); 121 }); 122 } else { 123 setTimeout(function() { 124 nodes = this_.moduleLists.map((item) => ({ 125 value: item.moduleId, 126 label: item.name, 127 level: level, 128 leaf: false, 129 ...item 130 })); 131 resolve(nodes); 132 }, 300); 133 } 134 } 135 },
      
    136 }

    补充两个函数

    // 级联面板前两个面板的change事件
       handleCascaderItemChange(data) {
          let len = data.length;
          if (len) {
            this.formData.moduleId = data[0];
            this.showData.modName = this.moduleLists.filter((item) => {
              return item.moduleId == data[0];
            })[0].name;
            if (len > 1) {
              this.formData.instanceId = data[1];
              this.showData.instanceName = this.instanceLists.filter((item) => {
                return item.instanceId == this.formData.instanceId;
              })[0].name;
            } else {
              this.showData.instanceName = '';
              this.showData.actionName = '';
              this.actionParams = {};
            }
          }
        },
        // 级联面板前第三步的change事件
        handleCascaderChange(data, type) {
          if (data.length) {
            this.formData.actionId = data[2];
            let actions = this.actionLists.filter((item) => {
              return item.actionId == this.formData.actionId;
            });
            /**使用原生方法,移除手动添加的active 状态的class名称 */
            let self = document.getElementsByClassName('self-addclass');
            if (self.length) {
              let spanLabel = self[0].children[1].innerHTML;
              if (spanLabel != actions[0].name) {
                self[0].className = 'el-cascader-node';
              }
            }
            this.actionFormLoading = true;
            this.showData.actionName = actions.length ? actions[0].name : '';
            this.actionParams = actions.length ? actions[0].parameters : {};
          }
       },

    // 级联面板前两个面板的change事件
    handleCascaderItemChange(data) {
    let len = data.length;
    if (len) {
    this.formData.moduleId = data[0];
    this.showData.modName = this.moduleLists.filter((item) => {
    return item.moduleId == data[0];
    })[0].name;
    if (len > 1) {
    this.formData.instanceId = data[1];
    this.showData.instanceName = this.instanceLists.filter((item) => {
    return item.instanceId == this.formData.instanceId;
    })[0].name;
    } else {
    this.showData.instanceName = '';
    this.showData.actionName = '';
    this.actionParams = {};
    }
    }
    },
    // 级联面板前第三步的change事件
    handleCascaderChange(data, type) {
    if (data.length) {
    this.formData.actionId = data[2];
    let actions = this.actionLists.filter((item) => {
    return item.actionId == this.formData.actionId;
    });
    /**使用原生方法,移除手动添加的active 状态的class名称 */
    let self = document.getElementsByClassName('self-addclass');
    if (self.length) {
    let spanLabel = self[0].children[1].innerHTML;
    if (spanLabel != actions[0].name) {
    self[0].className = 'el-cascader-node';
    }
    }
    this.actionFormLoading = true;
    this.showData.actionName = actions.length ? actions[0].name : '';
    this.actionParams = actions.length ? actions[0].parameters : {};
    this.renderActionForm();
    }
  • 相关阅读:
    链家网各城市二手房价格
    mitmproxy 配置
    Python操作APP -- Appium-Python-Client
    Appium连接模拟器
    adb server version (xx) doesn't match this client (xx); killing...
    Appnium 环境搭建
    KeyError: 'xxx does not support field: _id'
    Python执行JS -- PyExecJS库
    Python -- CSV文件读写
    Git的基本使用 -- 分支管理
  • 原文地址:https://www.cnblogs.com/fyjz/p/15656156.html
Copyright © 2020-2023  润新知