ElementUI-Plus虚拟化表格的使用

虚拟化表格在案例中是自己生成了一个数组并展示

const columns: Column<any>[] = generateColumns(tableData.value);
columns.unshift({
  key: "selection",
  width: 30,
  cellRenderer: ({ rowData }) => {
    const onChange = (value: CheckboxValueType) => (rowData.checked = value);
    return <SelectionCell value={rowData.checked} onChange={onChange} />;
  },

  headerCellRenderer: () => {
    const _data = unref(data);
    const onChange = (value: CheckboxValueType) =>
      (data.value = _data.map((row) => {
        row.checked = value;
        return row;
      }));
    const allSelected = _data.every((row) => row.checked);
    const containsChecked = _data.some((row) => row.checked);

    return (
      <SelectionCell
        value={allSelected}
        intermediate={containsChecked && !allSelected}
        onChange={onChange}
      />
    );
  },
});

这一段是复选框的逻辑,不用改。

需要改的只有generateColumns列的生成和数据的绑定generateData

const generateColumns = (data: any[]) => {
  return ["name", "sex", "status"].map((key) => ({
    key,
    dataKey: key,
    title: key.charAt(0).toUpperCase() + key.slice(1),
    width: 150,
  }));
};

const generateData = (data: any[]) => {
  return data.map((item, index) => ({
    ...item,
    id: `row-${index}`,
    checked: false,
    parentId: null,
  }));
};

生成列的要点在于给出列的值,重点是这个dataKey。

列的dataKey用于和数据的key值绑定。

比如列:

const columns = [
  { key: 'name', dataKey: 'name', title: 'Name', width: 150 },
  { key: 'sex', dataKey: 'sex', title: 'Sex', width: 150 },
  { key: 'status', dataKey: 'status', title: 'Status', width: 150 },
];

数据:

const data = [
  { name: 'John', sex: 'male', status: 'active' },
  { name: 'Sarah', sex: 'female', status: 'inactive' },
  // ... 其他数据对象
];

这样每个列的dataKey都会找到数据的key,比如dataKey: 'name’就会展示 name: 'xxx’中的xxx

总的来说其实需要改的主要是两个函数generateData和generateColumns ,生成展示数据和列数据。
这两个函数实现的功能是:传入自己的数据(都是数组),之后在内部遍历并为所有数组的每个元素都加上案例中的属性:例如generateData中就是加上了这三个属性:

	id: `row-${index}`,
    checked: false,
    parentId: null,

和Table表格不同
展示数据的时候,如果是提前准备好的静态数据就没什么。
如果是需要axios请求获取到的数据就需要做好判断。
这里我加上了对数据的判断,只有data存在时才渲染。

<el-table-v2 v-if="data && data.length > 0"
          :columns="columns"
          :data="data"
          :width="width"
          :height="height"
          fixed
        />
  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值