当前位置: 首页 > 知识库问答 >
问题:

typescript - vue3+ts+element-plus的表格的默认勾选复选框以后,刷新页面,会调用selection-change事件?

蒋承教
2023-04-27

![image.png](/img/bVc6L这个是写的html

// 获取每一行的key
const rowKey = (row:any) => {
  return row.id;
};
// 勾选复选框事件
const handleSelectionChange = (selection: User) => {
  let currentRow;
    if (selection.length > multipleSelection.value.length) {
      // 勾选了复选框
      currentRow = selection.slice(-1)[0]; // 获取最后一个元素
    } else {
      // 取消了复选框
      currentRow = multipleSelection.value.find(
        (row:any) => !selection.includes(row)
      ); // 获取不在 selection 中的元素
    }
    multipleSelection.value = selection
    SelectionChange(currentRow)
}
const SelectionChange = (row:any) => {
    SigCategoryUpdate({
      id: row?.id,
      category: row?.category,
      enable: !row?.enable
    }).then(res => {
      if(res.code === 200) {
        tableData.value.forEach((item:any) => {
          if(item.id === row.id){
            item.enable = !row.enable
          }
        })
        nextTick(() => toggleSelection(tableData.value))
      }
    })
}

这个是进入页面的时候获取到数据,添加默认的勾选框

const getRuleManageData = () => {
  RuleManage({
    engine: 'engine-1'
  }).then(res => {
    if(res.code === 200) {
      listLoading.value = false
      tableData.value = res.data.sig_category
      nextTick(() => toggleSelection(res.data.sig_category))
    }
  })
}
const toggleSelection = (rows: any) => {
  if(rows) {
    rows.forEach((row: any) => {
      if(row.enable) {
        multipleTableRef.value!.toggleRowSelection(row,row.enable)
      }
    })
  }else {
    multipleTableRef.value!.clearSelection()
  }
}

我在改变了勾选框状态以后,刷新页面他会自动执行handleSelectionChange事件里面的SelectionChange事件,导致选中的也会变为没选中,如何解决有没有什么方法,麻烦给我指正一下

共有1个答案

谢泉
2023-04-27

你先修改 toggleSelection:

const toggleSelection = (rows: any, isInitialLoad: boolean) => {
  if(rows) {
    rows.forEach((row: any) => {
      if(row.enable) {
        multipleTableRef.value!.toggleRowSelection(row, row.enable, isInitialLoad);
      }
    })
  }else {
    multipleTableRef.value!.clearSelection()
  }
}

然后,在 getRuleManageData 中调用 toggleSelection 时候,传true 作为 isInitialLoad 参数:

const getRuleManageData = () => {
  RuleManage({
    engine: 'engine-1'
  }).then(res => {
    if(res.code === 200) {
      listLoading.value = false
      tableData.value = res.data.sig_category
      nextTick(() => toggleSelection(res.data.sig_category, true))
    }
  })
}
 类似资料:
  • vue3+element-plus使用分页table,当数据多页时,如何在跨页切换时保留其他页已勾选项的勾选状态? 例如:多页下勾选,第一页勾选3条,第二页勾选2条,返回第一页,依旧显示勾选的3条(前提是第一页中仍然有该3条数据)

  • 我需要一些帮助,我不知道如何解决这个问题。 当我设置适配器时,我需要默认选择几个复选框,但我不能这样做。为什么?我认为问题是CheckableRelativeLayout。我使用RelativeLayout的这个变体,因为我需要单击行并选择复选框。 当我使用RelativeLayout的这个变体时,列表中的所有复选框都未选中。如果您在最后看到我的日志,当选中复选框时会触发事件“onCheckedC

  • vue3+element-plus el-table选择框变成心形 网上搜索

  • 本文向大家介绍基于vue v-for 循环复选框-默认勾选第一个的实现方法,包括了基于vue v-for 循环复选框-默认勾选第一个的实现方法的使用技巧和注意事项,需要的朋友参考一下 应用场景:在进行多选的时候一般默认显示第一个。 实现方法:纯vue实现 例子: 拓展:默认被选中的复选框,只需要index指定即可。 以上这篇基于vue v-for 循环复选框-默认勾选第一个的实现方法就是小编分享给

  • 我希望在选中表中的所有复选框时选中标题复选框,如果没有选中单个复选框,则应取消选中标题复选框。

  • 如果选中复选框D并取消选中其他复选框,我希望选中复选框K和F。同样,如果选中复选框I,则前面的复选框I将被选中,下面的复选框将被取消选中。我的html代码是: 我为此所做的是: 这看起来很乱,还有一个很酷的过程吗???