【问题标题】:Child component getting data from @Input or Service Subscription? Which is better?子组件从@Input 或服务订阅获取数据?哪个更好?
【发布时间】:2020-05-14 17:17:16
【问题描述】:

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

【问题讨论】:

  • 这取决于你。使用@Input 而不是使用Subject(或BS)传递数据的主要区别在于您对子组件更新的控制。
  • 没有better。只需选择您喜欢的。
  • 假设父组件是智能组件,子组件是哑组件(理想情况下可重用),您应该使用@Input,因为您不太可能希望子组件访问您服务中的其他方法。跨度>

标签: angular subscription angular-components angular-input


【解决方案1】:

@Input() 的用例

  1. 当我们只有一到两个层次结构时
  2. 当我们传递的值被其他组件使用时

服务用例

  1. 当我们有很多层次结构并且传递值变得有点困难时
  2. 当某些组件功能依赖于某些组件值时,该值可能低于 10 个层次结构,因此在这种情况下,我们可以使用订阅服务,这样每当值发生变化时,我们就可以在我们的组件中自动使用它
  3. 当一个值被多个组件使用时

【讨论】:

    【解决方案2】:

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

    在这些场景中,父组件可以用作包装器或代理:

    1. 服务未以子组件所需的确切格式提供数据。

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

    3. 子组件需要从多个服务聚合的数据。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2016-11-23
        • 1970-01-01
        • 1970-01-01
        • 2020-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多