Angular 5 - 服务能否取代自定义事件和 属性 绑定?

Angular 5 - Can services replace custom event and property binding?

我正在学习 angular 5 个新知识,但我不知何故苦苦挣扎,无法 100% 理解用于在组件之间进行通信的自定义事件绑定(使用@Input 和@Output)。我知道服务可以完成相同的功能,所以我在想,因为我不太擅长使用@input 和@output,所以我不应该在它们上浪费更多时间并继续下去,直到我了解这些服务,所以我问是否可以,这会影响我吗?或者它可以完全取代它们?

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

我认为使用服务或活动是个人喜好问题。只要您了解何时可以使用它们的限制以及它们各自的优点即可。两种方法都有它们的用武之地。

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

@input@output 用于在父组件和子组件之间进行单向或双向绑定的情况。

如果您需要让兄弟姐妹或祖孙辈交流,那么 'data' 服务,它有一个或多个可以订阅的数据对象(作为可观察对象),以及允许修改数据的方法,是一个实用的解决方案。

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