2016-10-10 4 views
1

Для обучающего приложения, ориентированного на мышление, все элементы (строки/текст) размещаются через различные компоненты в представлении. Данные извлекаются из базы данных и сохраняются в ObservableArray, если они находятся в представлении. Существуют два различных вида изменений: 1. прокрутка, изменения вида и новые данные; 2. Пользователь изменяет/добавляет/удаляет элемент в представлении (новые данные не извлекаются).Как использовать rxjs Наблюдаемые в нескольких компонентах в Angular 2

Лучше ли «читать» наблюдаемые объекты ObjectArray итерации с помощью * ngFor, передавая каждый объект соответствующему компоненту или только передавая массив идентификаторов и позволяя каждому компоненту подписываться на соответствующий элемент внутри ObservableArray?

До сих пор я использую первый подход, который я видел во многих учебниках и примерах, но с использованием второго упростит пользовательские изменения, и только соответствующие элементы будут обнаружены.

+0

Это может быть полезно также http://stackoverflow.com/questions/36271899/what-is-the-correct-way-to-share-the-result-of-an-angular-2-http-network -вызывать –

ответ

1

Я думаю, что первый способ все же лучше. На стороне оптимизации вы можете использовать trackBy особенность *ngFor

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

Это предполагает элемент имеет уникальный идентификатор. Это гарантирует, что каждый элемент item не будет отображаться снова. Дополнительно установите changeDetectionStrategy данного элемента как OnPush. Таким образом, обнаружение изменений компонентов элемента будет запущено только тогда, когда изменяется входной сигнал, то есть item.

В основном item Компонент должен быть немым (презентационным) компонентом, в котором отображаются только данные элемента.

Смежные вопросы