elementUI表格下拉引发的一系列问题

纯记录一下下我的代码,当作日记好了,第一次独立开发遇到的问题太多,就想着拜托拜托,一定要解决,如果解决了我就一定写一篇记录一下,然后第一篇就这样诞生了。。。

初始界面

按照时间段查询出所有设备的合计,然后点击详情出现该项的详细信息在这里插入图片描述在这里插入图片描述
看需求貌似是个很好实现的功能,但是我居然搞了一个多礼拜😭😭,第一是因为其他一些事耽误了,第二我觉得是我蠢,第三还是我蠢😭

我来罗列一下期间出现的各种问题

  1. 表格的错乱
    看着着实的难受,这个问题就解决了两天。。。因为之前也有一个页面需要动态合并单元格,所以这个页面就偷了个懒,直接ctrl+C,ctrl+V了
    在这里插入图片描述
// An highlighted block
 <el-table :data="list" :model="list" border :span-method="this.merge ? this.mergeMethod : this.spanMethod">
data(){
	return{
	   merge: ["Name"],
       mergeLine: {},
       mergeIndex: {},
       spanMethod: Function,
	}
}

async todayInfoList(params){
      let res = await postCopyInfoList(params);
      if (res.code === 200) {
        this.tableData=res.data;
        this.getMergeArr(this.tableData, this.merge);
	    ....
      }
    },
getMergeArr(tableData, merge) {
      if (!merge) return;
      this.mergeLine = {};
      this.mergeIndex = {};
      merge.forEach((item, k) => {
        tableData.forEach((data, i) => {
          if (i === 0) {
            this.mergeIndex[item] = this.mergeIndex[item] || [];
            this.mergeIndex[item].push(1);
            this.mergeLine[item] = 0;
          } else {
            if (data[item] === tableData[i - 1][item]) {
              this.mergeIndex[item][this.mergeLine[item]] += 1;
              this.mergeIndex[item].push(0);
            } else {
              this.mergeIndex[item].push(1);
              this.mergeLine[item] = i;
            }
          }
        });
      });
    },
    //合并单元格
    mergeMethod({ row, column, rowIndex, columnIndex }) {
      const index = this.merge.indexOf(column.property);
      if (index > -1) {
        const _row = this.mergeIndex[this.merge[index]][rowIndex];
        const _col = _row > 0 ? 1 : 0;
        return {
          rowspan: _row,
          colspan: _col
        };
      }
    },

这种适合合并量大的时候使用,不过我也不知道为什么用在这个页面就不行了,我也没去找原因,最终参考了一篇,很抱歉那篇文章找不到了,也不知道该不该贴上来,但是秉着这是一篇日记,我就贴上来了,如果原作者看到了,不想要这样出现的话,我就设置仅自己看吧。

以下是解决了错位问题的代码

// An highlighted block
<el-table :data="newTable" :model="newTable" border :span-method="objectSpanMethod">
    mergeComon(name,rowIndex){
      var equName=this.newTable[rowIndex][id];
      if(rowIndex>0){
        if(this.newTable[rowIndex][id] != this.newTable[rowIndex-1][id]){
          var i = rowIndex,num = 0;
          while(i<this.newTable.length){
            if(this.newTable[i][id] === equName){
              i++;
              num++;
            }else{
              i=this.newTable.length
            }
          }
          return {
            rowspan:num,
            colspan:1
          }
        }else{
          return{
            rowspan:0,
            colspan:1
          }
        }
      }else{
        var i = rowIndex,num = 0;
        while(i<this.newTable.length){
          if(this.newTable[i][id] === equName){
            i++;
            num++;
          }else{
            i=this.newTable.length
          }
        }
        return {
          rowspan:num,
          colspan:1
        }
      }
    },
    objectSpanMethod({ row, column, rowIndex, columnIndex }){
      switch(columnIndex){
        case 0:
        return this.mergeComon('Name',rowIndex);
      }
    },
  1. 下面的就到了最最最坑的地方了,又找了两天,就在今天终于找到了问题所在 !!!!

在这里插入图片描述
图中出现的问题是:依次从上往下点击“详情”按钮,第一个是正常的,从第二个开始,点击获取的都为再下一个的信息,例如点击“娃娃机合计合计”,打印出的equipmentName字段应为“娃娃机合计合计”,但是却变成了“篮球机合计合计”。哇塞,这真的让我一顿好找

一开始表格先渲染出所有合计,然后点击详情,调相同的接口,然后返回我单独的详情,我splice进入原数组,然后再渲染,一开始很怕是splice的原因,所以问题定位错误,就一个劲的看splice引发的问题。中途就因为定位错误好几次,耽误了好久,最终在今天一开窍,才想起来要打印看看每次点击之后原数组的变化,天!我个猪脑子。。。

最后发现打印出来的数组没有一点问题,就点击的时候出现了问题,最后才把关键锁在了按钮上

// An highlighted block
<el-table-column label="设备自定义名称" prop="equipmentName">
  <template slot-scope="scope">
    {{ scope.row.equipmentName }}
    <el-button type="text" v-if="props.row.equipmentName.indexOf('合计') !== -1" @click.once="goToDetail(scope.row)">详情></el-button>
  </template>
</el-table-column>

因为按钮只能点击一次,所以使用了 .once,后来想到了el-button 是自定义组件,组件绑定当前组件的事件是不会触发的,然后就是觉得自己更蠢的时刻到了,没错,就换成了 .native就好了。。。

// An highlighted block
    <el-button type="text" v-if="props.row.equipmentName.indexOf('合计') !== -1" @click.native="goToDetail(scope.row)">详情></el-button>

好了,今日唠嗑到此结束,这就是一篇记录自己代码的日记,如果觉得哪儿写的不好,欢迎指指点点,但希望善良点对待我,我还只是个孩子,谢谢

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Element UI 中,可以使用下拉菜单来嵌套表格。下面是一个示例代码: ```html <template> <div> <el-dropdown @command="handleCommand"> <span class="el-dropdown-link"> 下拉菜单<i class="el-icon-arrow-down el-icon--right"></i> </span> <el-dropdown-menu slot="dropdown"> <el-dropdown-item command="1">选项1</el-dropdown-item> <el-dropdown-item command="2">选项2</el-dropdown-item> <el-dropdown-item command="3">选项3</el-dropdown-item> </el-dropdown-menu> </el-dropdown> <el-table :data="tableData"> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> <el-table-column prop="address" label="地址"></el-table-column> </el-table> </div> </template> <script> export default { data() { return { tableData: [ { name: '张三', age: 18, address: '北京' }, { name: '李四', age: 20, address: '上海' }, { name: '王五', age: 22, address: '广州' } ] }; }, methods: { handleCommand(command) { console.log('选中的命令:', command); // 根据选中的命令做相应的处理 } } }; </script> ``` 这段代码中,我们使用 `el-dropdown` 和 `el-table` 组件来实现下拉菜单和表格的嵌套。在下拉菜单中,我们使用 `el-dropdown-menu` 组件来定义下拉菜单的内容,通过 `el-dropdown-item` 组件来定义选项。当选择一个选项时,可以通过 `@command` 事件来获取选中的命令,然后根据选择的命令执行相应的处理逻辑。 请注意,这只是一个简单的示例。根据你的实际需求,你可能需要进一步定制和调整代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值