【问题标题】:Angular 4 cdk table trackby does not work. The whole table is rerenderedAngular 4 cdk 表 trackby 不起作用。整个表被重新渲染
【发布时间】:2017-10-25 08:50:53
【问题描述】:

已解决: 问题出在 rxJS 线程中。一个线程过于频繁地传递空数组,所以它重置了表。

表格每 4 秒更新一次。为了停止闪烁,我应用了 trackBy 函数。我看到函数被触发了,但是整个表被重新渲染了。我想我做错了什么。 我做什么... 设置跟踪功能。

<mat-table ... [trackBy]="trackById">

实现跟踪功能。

 trackById(index, item) {
    console.log(item._id);
    return item._id;
  }

表格由表格的数据源更新更新。

 updateOperations() {
    this.dataSource = new Source(this.forexService);
  }

整个组件都在这里https://gist.github.com/vlikin/6f130c53b1fd38116afe20d15a2afc40。

此组件显示操作列表。它从两个可观察对象中检索数据。表的数据源创建一次。数据更改由行为主体数据发起。数据回溯过程位于函数update。 mat-table 组件使用必须优化输出的指令 trackBy。但它仍然在闪烁。

有两个带有和不带有 trackId 的 plunk: 与-https://embed.plnkr.co/wK5Jh4tIgY9p9Gw4rfhx/ 没有 - https://embed.plnkr.co/Rc9z9aXlalQe8yWpGjUq/

根本没有这样的效果。在我的应用程序中它正在闪烁。

我希望,有人会帮助我。问候。

【问题讨论】:

  • 只需返回项目 // 或索引和 *ngFor ".....; trackBy: trackById"。如果您不使用 ngFor,请发布更多代码
  • 整个组件在这里gist.github.com/vlikin/6f130c53b1fd38116afe20d15a2afc40。该组件显示操作列表。它从两个可观察对象中检索数据。表的数据源创建一次。数据更改由行为主体数据发起。数据回溯过程位于函数update。 mat-table 组件使用必须优化输出的指令 trackBy。但它仍然在闪烁。
  • Mat-table 没有 trackby 属性,据所知(至少我可以找到任何相关的东西),如果你设置了 console.log在 trackById 方法中,它从未被触发,这更加强化了我认为它不是属性的想法
  • 这是 cdk-table 而不是 mat-table,对吧?

标签: angular angular-cdk


【解决方案1】:

这是一个逻辑问题。 DataSource 是由几个流组合而成的。所以其中一个流重置了数据。

【讨论】:

  • 你好维克托,我的垫子树也有同样的问题。你能详细说明一下这个问题吗?我目前正在使用异步 httpclient 获取请求更新数据源。
  • 我需要看代码。就我而言,它不起作用,因为在数据数组之后,空数组通过了,这重置了跟踪功能。所以 trackId 在那里没有用,但它起作用了。
  • 我做了一些测试,看来我必须不断修改原始列表值,而不是覆盖旧列表值。例如:myBehaviorSubject.next(ReturnWithModifications(myBehaviorSubject.getValue())) 而不是 myBehaviorSubject.next(httpRequestWithNewValuesAndOldValues())
  • 所以如果我理解正确的话。这仅在我编辑可观察对象中的现有值时才有效?
猜你喜欢
  • 2018-11-18
  • 1970-01-01
  • 1970-01-01
  • 2010-12-20
  • 2017-03-04
  • 2017-10-31
  • 1970-01-01
  • 2016-02-16
  • 1970-01-01
相关资源
最近更新 更多