1

我正在研究一个显示一组数据的角度项目。为此,我正在使用primeNG数据表。一切正常,但是当我从数据源中删除一个条目时,数据表没有刷新,我仍然可以在表中看到已删除的条目。任何帮助将不胜感激。

我的组件.html

 <p-dataTable [value]="tabledata">
    <p-column field="vin" header="Vin"></p-column>
    <p-column field="year" header="Year"></p-column>
    <p-column field="brand" header="Brand"></p-column>
    <p-column field="color" header="Color"></p-column>
</p-dataTable>

我在删除时对数据源进行切片

我的组件.ts

this.tabledata.slice(this.tabledata.indexOf(datatodelete), 1); 
4

2 回答 2

2

请阅读您提供Change detection的链接的章节。

基本上,这个想法是您可能会改变存储表值的数组,而 angular 不知道数据已更改,因为数组仍然相同。因此,您需要使用旧数组中的所有值创建一个新数组,但您删除的数组除外。然后,角度会发现它需要重新渲染表格,因为数组引用会发生变化。

请阅读更多关于角度变化检测策略的信息,例如这里。基本上,如果你使用检测策略default,那么一切都会正常工作,因为 Angular 会一直检查所有组件是否有变化。但是对于较大的网页可能会很慢,因此建议使用更改检测策略OnPush。它的作用是仅检查对象的引用,如果它们已更改,它将更新视图(您所看到的)。关于它是如何工作的,有很多细节,我不能放在这里。

于 2017-09-08T06:28:30.087 回答
0

最后我得到了解决方案。我刚刚创建了我的数据源的副本。并从此副本中删除条目,然后将此副本重新分配给我的原始数据源。

 this.datatablecopy = Object.assign([], this.datatable);


this.datatablecopy.slice(this.datatablecopy.indexOf(datatodelete), 1); 
this.datatable = this.datatablecopy;
于 2017-09-08T11:25:15.617 回答