2016-10-10 12 views
1

マインドマップのような学習アプリケーションでは、すべての要素(行/テキスト)がビューの異なるコンポーネントを介して配置されます。データはデータベースからフェッチされ、ビューにあればObservableArrayに保存されます。 2つの異なる種類の変更があります。1.スクロール、ビューの変更、新しいデータの取得。 2.ユーザはビュー内の要素を変更/追加/削除します(新しいデータは取得されません)。角度2の複数のコンポーネントでrxjs Observablesを使用する方法

ObservableArray内の一致するElementに各Componentをサブスクライブするだけで、ObservableArray内のObservableを* ngForで繰り返し読み込み、各Objectを一致するComponentに渡したり、

これまで多くのチュートリアルや例で見たような最初のアプローチを使用していますが、2番目の方法を使用するとユーザーの変更が簡単になり、関連する要素のみが検出されます。

+0

これも参考になります。http://stackoverflow.com/questions/36271899/what-is-the-correct-way-to-share-the-result-of-an-angular-2-http-network -呼び戻す –

答えて

1

私は最初の方法はまだ優れていると思います。最適化の面では、あなたはこれがあなたの項目は一意のIDを持っていると仮定し*ngFor

<div *ngFor="let item for (items | async); trackBy: item?id"> 
    <item [item]="item"></item> 
</div> 

trackBy機能を使用することができます。これにより、各item要素が確実に再描画されなくなります。さらに、項目コンポーネントのchangeDetectionStrategyOnPushと設定します。したがって、アイテムコンポーネントの変更検出は、入力がitemに変更された場合にのみ発生します。

基本的にitemコンポーネントはアイテムデータのみを表示するダム(プレゼンテーション)コンポーネントである必要があります。

関連する問題