Angular 从@Input或服务订阅获取数据的子组件?哪个更好?

Angular 从@Input或服务订阅获取数据的子组件?哪个更好?,angular,subscription,angular-components,angular-input,Angular,Subscription,Angular Components,Angular Input,我有一个父组件、一个子组件和一个服务。父组件从服务订阅对象数据。子组件也需要侦听该数据更改。哪个更好,子组件使用@Input从其父组件获取数据,还是让它也订阅服务 @Input()的用例 当我们只有一到两个层次结构时 当我们传递的值被其他组件使用时 服务用例 当我们有很多层次结构时,传递值变得有点困难 当一些组件功能依赖于某个组件值时,该值可能向下10个层次,因此在这种情况下,我们可以使用Subscribe to service,因此每当值发生变化时,我们都可以在组件中自动使用它 当一个值被多个

我有一个父组件、一个子组件和一个服务。父组件从服务订阅对象数据。子组件也需要侦听该数据更改。哪个更好,子组件使用@Input从其父组件获取数据,还是让它也订阅服务

@Input()的用例

  • 当我们只有一到两个层次结构时
  • 当我们传递的值被其他组件使用时
  • 服务用例

  • 当我们有很多层次结构时,传递值变得有点困难
  • 当一些组件功能依赖于某个组件值时,该值可能向下10个层次,因此在这种情况下,我们可以使用Subscribe to service,因此每当值发生变化时,我们都可以在组件中自动使用它
  • 当一个值被多个组件使用时

  • 若服务以所需的格式提供准确的数据,那个么直接订阅服务比依赖父组件更好。这将降低代码的总体复杂性,并提高性能

    在以下情况下,父组件可以用作包装器或代理:

  • 服务未提供子组件所需的精确格式的数据

  • 许多子组件依赖于服务提供的相同数据

  • 子组件需要从多个服务聚合数据


  • @Emmanuel Sayson如果您不更新父级上的数据,则最好使用服务,这取决于用例。
    嵌套层次结构中的服务更清晰

    由您决定。使用
    @输入
    而不是
    主题
    (或BS)传递数据的主要区别在于您对子组件更新的控制。没有比
    更好的
    。只要选择您喜欢的。假设父组件是智能组件,子组件是哑组件(理想情况下是可重用的),您应该使用@Input,因为您不太可能希望子组件能够访问服务中的其他方法。