[ElemeFE/element][Bug Report] 动态table-column,数据改变不会更新表头的内容

2024-08-19 661 views
8

2.14.1

macos/chrome 86.0.4240.198

2.6.11

Reproduction Link

https://codepen.io/mountainp/pen/eYzXaMo

data() { return { columns: [{label: '1'}, {label: '2'}] }; }

mounted() { setTimeout(() => { this.columns = [{label: '11'}, {label: '22'}]; }, 5000); }

表头的内容应该更新为11,22

回答

8
<template>
  <el-table>
    <el-table-column
      v-for="(c, index) in columns"
      :key="index"
      :label="c.label"
    >
      <template #header>{{ c.label }}</template>
    </el-table-column>
  </el-table>
</template>

<script>
export default {
  data() {
    return {
      columns: [{label: '1'}, {label: '2'}]
    };
  },
  mounted() {
    setTimeout(() => {
      this.columns = [{label: '11'}, {label: '22'}];
    }, 5000);
  }
}
</script>
9

key 依然是 1、2,没有触发更新。

1

遇到了同样的问题,请问您那边解决了吗?

6

大家遇到同样的问题可以看下是否添加了自定义表头渲染,这也可能导致动态表头不更新的问题,具体原因应该要看下源码怎么实现的 image

1

没有

5

我这边已经解决了,是使用了自定义表头的问题,已经贴到上边了

5

如果使用了自定义表头应该怎么解决呢?

4

用jsx写的怎么搞

5

在header具名插槽那边 添加slot-scope=“scope”

3

有啥办法解决么

7

上面一个同学已经提到了,你这个明显是数据更新后key还是1,2的问题,不要用 index作 key, 换成label就行

<template>
  <el-table>
    <el-table-column
      v-for="(c, index) in columns"
      :key="c.label"
      :label="c.label"
    >
      <template #header>{{ c.label }}</template>
    </el-table-column>
  </el-table>
</template>

<script>
export default {
  data() {
    return {
      columns: [{label: '1'}, {label: '2'}]
    };
  },
  mounted() {
    setTimeout(() => {
      this.columns = [{label: '11'}, {label: '22'}];
    }, 5000);
  }
}
</script>
8

上面一个同学已经提到了,你这个明显是数据更新后key还是1,2的问题,不要用 index作 key, 换成label就行

<template>
  <el-table>
    <el-table-column
      v-for="(c, index) in columns"
      :key="c.label"
      :label="c.label"
    >
      <template #header>{{ c.label }}</template>
    </el-table-column>
  </el-table>
</template>

<script>
export default {
  data() {
    return {
      columns: [{label: '1'}, {label: '2'}]
    };
  },
  mounted() {
    setTimeout(() => {
      this.columns = [{label: '11'}, {label: '22'}];
    }, 5000);
  }
}
</script>
9

<template #header="{column}">{{ column.label }}

1

这样确实可以,但这也太奇怪了。其他地方的slot都可以正常更新,就table的slot="header"里有问题