2017-10-02 14 views
0

私のアイテムリストのビューを更新しようと数時間苦労しています。ngFor内の角2のコンポーネントは更新されません

私はdocument-listというコンポーネントを持っています。 このコンポーネントは、渡された各ドキュメントを通過し、document-list-itemというコンポーネントを含みます。

ドキュメントのリストを更新すると、子ビューは更新されません。

Iはdocument-list成分のdocumentsアクセッサのものを試した:

public set documents(value: DocumentDetails[]) { 
    this._documents = value; 
    // used one by one 
    this.changeDetector.detectChanges(); => doesn't work 
    this.changeDetector.markForCheck(); => doesn't work 
    this.appRef.tick(); => throw an error about recursivity 
} 

Iはまた、(ウェル配置にconsole.logは、それが中に行くことを私に示した)手動セッターにリストを更新しようとした:

private _documents: DocumentDetails[] = []; 
@Input() 
public set documents(value: DocumentDetails[]) { 
    this._documents = []; 
    for (let i = 0; i < value.length; i++) { 
     this._documents[i] = value[i]; 
    } 
} 
public get documents() { 
    return this._documents; 
} 

アクセサでこれをやっていた作品だけの事:

public set documents(value: DocumentDetails[]) { 
    this.documents = []; 
    setTimeout(() => { 
     this._documents = value; 
    }, 0); 
} 

それはうまくいったが、文書配列が更新されるたびに点滅するリストが表示されたが、これは受け入れられない。

すべてのヘルプは、あなたが持って歓迎

+0

をあなたはplunkerを作成できますか? – yurzui

+0

https://plnkr.co/edit/AZhKuZnFYqWbRekmMLwd?p=preview – yurzui

+0

コンポーネントの中で 'this.documents'ではなく' this._documents'の配列を埋めるようですが、htmlでは 'documents'を使用します – Maxim

答えて

1

です:

<document-list-item [document]="document"></document-list-item> 

つまり、あなたの子クラスにいる必要があります

@Input() 
document: any; 
+0

私はそれが明らかだと思うこれは子ドキュメントにあります。さもなければ、問題は更新ではなく、むしろ作成するでしょう:) – Robouste

+0

あなたはこのngForがうまく働いているのですか? htmlにドキュメントの内容を直接表示すると、更新されますか? – Wandrille

+0

リストは完全に動作していて、表示する内容を示しています。問題は、他のコンポーネントの要素の1つを更新するときです。ドキュメントのリストを含むオブジェクトは更新されますが、ビューは更新されません – Robouste

関連する問題