Angular 2:组件输入/输出或更新服务属性

时间:2016-02-22 11:12:33

标签: angularjs

学习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-itemactive是管道,也是项目上的属性):

<list-item *ngFor=“#item of items | active” 
           (item)=“item”
           [(active-item-id)]=“activeItemId”>
</list-item>

但是由于我有task-service包含各种相关的任务,我可以在服务上使用已经存在的activeItemId - 属性(具有eventemitter),并且所有各种任务组件都可以只需通过此属性获取信息(并进行更新),而不是通过输入/输出通过各种组件来回“发送”该属性。

什么时候才能将服务用于这样的事情,何时适合使用组件的输入/输出呢?

1 个答案:

答案 0 :(得分:5)

通过Angular Google网上论坛获得great answer

  

如果没有阅读完整的解释,我会说使用绑定   可能,否则使用共享服务。

     

无法绑定    - 这两个组成部分不是直接的父母/子女    - 组件由路由器添加    - 组件由DynamicComponentLoader

添加      

如果您可以同时共享多个组件之间的数据   即使其中一个或一些是直接的,也更容易不使用绑定   孩子。

谢谢你,Günter!