2017-05-22 1 views
1

각도 2에서 각도 4로 업그레이드 한 후 데이터로 전달되는 목록의 변경 사항이 표시되지 않으므로 primeng 데이터 테이블이 도청됩니다.업그레이드 후 버그가있는 PrimEng 데이터 테이블 변경 감지 각도 4에서

<p-dataTable selectionMode="single" [resizableColumns]="true" [rows]="20" [paginator]="true" [value]="queuedJobs" [rowHover]="true" [globalFilter]="gb" [style]="{'cursor':'pointer'}"> 

</p-dataTable> 

을 내가 배열을 "queuedJobs"를 수정할 때, 데이터 테이블의 콘텐츠는 그것을 해결하는 방법 각도 2에 얼마나 변경되지 않습니다 : 예를 들어

, 나는 데이터 테이블이? 같은 버그가 있습니까?

감사 마테우스

답변

1

우리는 우리의 프로젝트에 같은 문제가 않습니다. I think the answer lies in the way PrimeNG handles value changes : 변경 사항이 반영 하지을 그래서

@Input() get value(): any[] { 
    return this._value; 
} 

set value(val:any[]) { 
    this._value = val ? [...val] : null; 
    this.handleDataChange(); //filter the value 
} 

내 생각 엔, 어떻게 든 <p-dataTable/>의 내부 배열 값이 수정중인 배열의 동일한 인스턴스되지 않는 것입니다. 의 <p-dataTable/>handleDataChange 방법이라고 지금

//...after you've done your array updates 
this.queuedJobs = this.queuedJobs.slice(); // does a shallow clone of the array 

, 데이터가 다시 렌더링되어

임시 해결 방법은 새로운 인스턴스에게 당신이 그것을 수정 때마다로 배열을 강제하는 것입니다.

이것은 영구적 인 해결책이 아닙니다. 잘만되면, 다음 버전의 primeng이이 문제를 해결합니다.

편집 : 지금 그들이 내부적으로 배열을 설정하는 방식에 기인 실현은 :

this._value = val ? [...val] : null; 

이 본질적으로 배열을 복제합니다 따라서 변경 사항이 반영되지 않습니다. 확실히 버그.

편집 2 : talpaz이 this is a part of the design을 지적했다, 그래서 당신은 요소를 추가하거나 제거 후 새 배열을 생성해야한다.

"디자인에 의해"변화 될 것으로 보인다
+0

참조하십시오. 비 직관적 인 기능이 의도적으로 설계된 것이라면, imho. –

+1

@ NullԀʇɹ92065 4.1.0부터 테이블에'[immutable] = "false"'를 지정하여 기존의 동작을 수행 할 수 있습니다. –

+0

@ "Michael Kucinski"감사합니다. 한번 시도해 보겠습니다. –