Angular 5 - 服务可以取代自定义事件和属性绑定吗?

时间:2018-01-20 22:55:10

标签: angular angular5

我正在学习角度5并且我在某种程度上挣扎,并且无法理解100%的自定义事件绑定(使用@Input和@Output)来进行组件之间的通信。我知道服务可以做同样的功能,所以我一直在思考,因为我在使用@input和@output时并不擅长,我不应该浪费更多时间在他们身上并继续我直到我了解它服务,所以我问是否可以,这会影响我吗?或者它可以完全取代它们?

2 个答案:

答案 0 :(得分:0)

服务是更通用的方法,您可以在任何组件之间使用它们而不需要它们相关(父/子)。自定义事件只能在相关组件之间使用,并且只能达到一个级别。因此,如果您有一个Output事件属性,它将始终由直接父级捕获。它永远不会起泡。 另一方面,在使用具有延迟加载组件的服务时需要小心,因为您可能最终拥有相同服务的多个实例并具有意外行为。

我认为使用服务或事件是一个偏好问题。只要您了解何时可以使用它们的限制以及它们各自的优点。两种方法都有它们的位置。

关于你的问题我会说限制是的你可以使用服务。但我会建议更多地调查事件,因为他们也有自己的优势。

答案 1 :(得分:0)

@input@output用于父组件和子组件之间具有单向或双向绑定的位置。

如果您需要让兄弟姐妹或祖父母和孙子女进行交流,那么“数据”就是这样的。 service,有一个或多个可以订阅的数据对象(作为observables),以及允许数据修改的方法,是一种实用的解决方案。

有关数据服务和3个组件的示例,请参阅此Plunkr demo - 其中一个组件具有调用方法以更改数据的输入,而其他2个组件订阅该数据。