学习Angular 2并尝试理解何时应该使用组件输入/输出以及何时应该更好地更新服务属性(如果需要更新,可能附带EventEmitter)。
我有一个例如任务的列表,每个列表项显示此列表项的各种信息和选项。此列表的工作方式是只有一个列表项处于活动状态,而活动列表项位于列表顶部。每个列表项的其中一个选项是激活它(如果它尚未激活),但其他组件也可能更改哪个是活动项。
我有一个父task
组件,list
组件和一个list-item
组件(以及其他一些相关组件),此外我还有一个task-service
。
主task
组件可以使用list
组件(和something-realted
组件,所使用的许多组件需要知道并可能更改activeItemId
),如下所示:
<list [(active-item-id)]=“activeItemId”></list>
<something-related [(active-item-id)]=“activeItemId”></something-related>
list
组件可以这种方式使用list-item
(active
是管道,也是项目上的属性):
<list-item *ngFor=“#item of items | active”
(item)=“item”
[(active-item-id)]=“activeItemId”>
</list-item>
但是由于我有task-service
包含各种相关的任务,我可以在服务上使用已经存在的activeItemId
- 属性(具有eventemitter),并且所有各种任务组件都可以只需通过此属性获取信息(并进行更新),而不是通过输入/输出通过各种组件来回“发送”该属性。
什么时候才能将服务用于这样的事情,何时适合使用组件的输入/输出呢?
答案 0 :(得分:5)
通过Angular Google网上论坛获得great answer:
如果没有阅读完整的解释,我会说使用绑定 可能,否则使用共享服务。
无法绑定 - 这两个组成部分不是直接的父母/子女 - 组件由路由器添加 - 组件由DynamicComponentLoader
添加如果您可以同时共享多个组件之间的数据 即使其中一个或一些是直接的,也更容易不使用绑定 孩子。
谢谢你,Günter!