2016-10-10 82 views
1

对于类似于思维导图的学习应用程序,所有元素(行/文本)都通过视图中的不同组件放置。数据从数据库中提取并保存在ObservableArray中(如果它在视图中)。有两种截然不同的变化:1.滚动,视图改变,新数据被提取; 2.用户在视图中更改/添加/删除元素(不会获取新数据)。如何在Angular 2中的多个组件中使用rxjs Observables

将一个ObjectArray的observable“读”到它的迭代器中是否更好?将每个Object传递给匹配的Component,或者只传递一个id数组并让每个Component订阅ObservableArray中的匹配元素?

到目前为止,我正在使用我在许多教程和示例中看到的第一种方法,但使用第二种方法会使用户更改变得更加容易,只有相关元素才会发生更改。

+0

这可能也有帮助http://stackoverflow.com/questions/36271899/what-is-the-correct-way-to-share-the-result-of-an-angular-2-http-network -call式 –

回答

1

我觉得第一种方式还是比较好的。在优化方面,你可以使用的*ngFor

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

这里假设你的项目都有一个唯一的ID trackBy功能。这将确保每个item元素不会再次呈现。另外将项目组件的changeDetectionStrategy设置为OnPush。因此,仅当输入(即item)发生变化时才会触发项目组件更改检测。

基本上item组件应该是哑(呈现)组件,它只显示项目数据。

相关问题