0

我在 Angular 4 或 PrimNG Datatables 模块中检测到了一个错误。

我有一个简单的看法:

<span *ngFor="let node of nodes">{{node.label}}</span> //works with case 1,2,3 and 4

<p-dataTable [value]="nodes"> //works with case 1, 2, and 3 (but not with 4!)
     <p-column field="label" header="Label"></p-column>
</p-dataTable>

和组件中的代码:

private nodes:any[] = []

ngOnChanges() {
   //case 1 -> ok
   //this.nodes.push({label: 'foo'})

   //case 2 -> ok
   //this.nodes = [{label: 'foo'}]

   this.someService.getAll().subscribe(                     
        records => {  
             //case 3 ->ok
             //this.nodes = [{label: 'foo'}]

             //case 4 -> BUG
             //this.nodes.push({label: 'foo'}) //datatable is not updated
        }
   )
}

当我使用未注释的案例 1、2 或 3 运行此代码时,一切正常,但是当我尝试运行案例 4(与案例 1 相同但在服务解析之后)时 - prim ng 数据表似乎没有看到变化。在 Angular 2 中我没有这样的问题。你能解释一下这里发生了什么吗?:)

问候

4

1 回答 1

0

您应该在 angular2 和 angular4 中具有相同的行为。实际上,这不是错误,而是预期的行为。它与角度如何检测变化有关。要检测角度变化,只需执行===.

在您的情况 1 中,它可以工作,因为 changeDetection 是由 ngOnChange 本身触发的。

但是在您的情况 4 中,您只需向数组添加一个值,而不更改数组的引用nodes

对于其他情况,您将参考更改为nodesAngular 能够检测到更改。

我建议你看看这个答案,它有更多细节:Angular2 change detection: ngOnChanges not fire for nested object

于 2017-05-17T12:31:03.960 回答