Javascript 什么';这是';角度方式';一个孩子更新一个父母?

Javascript 什么';这是';角度方式';一个孩子更新一个父母?,javascript,angular,web-component,eventemitter,viewchild,Javascript,Angular,Web Component,Eventemitter,Viewchild,似乎有几种给这只猫剥皮的方法,但我想知道最好的做法和原因 如果我想在子cmp中收集一些数据并将其传递给父cmp,我可以: 使用来自父对象的函数包装对象,并将其作为输入传递给 子对象,调用输入上的函数 在子cmp中生成EventEmitter函数并发出结果, 在父cmp中收集数据 通过@ViewChild()访问该子对象,并直接调用它的 方法 使用要收集的数据创建一个ngModel(只有在表单中?) 我相信还有更多。对于非基于表单的组件,我觉得使用事件发射器是最有角度的事情。但我不能解释为什么

似乎有几种给这只猫剥皮的方法,但我想知道最好的做法和原因

如果我想在子cmp中收集一些数据并将其传递给父cmp,我可以:

  • 使用来自父对象的函数包装对象,并将其作为输入传递给 子对象,调用输入上的函数
  • 在子cmp中生成EventEmitter函数并发出结果, 在父cmp中收集数据
  • 通过@ViewChild()访问该子对象,并直接调用它的 方法
  • 使用要收集的数据创建一个ngModel(只有在表单中?)
我相信还有更多。对于非基于表单的组件,我觉得使用事件发射器是最有角度的事情。但我不能解释为什么有良好的技术基础。想法?

  • @Output()
    是在没有其他选项的具体原因的情况下,连接子级和父级的第一个选择。

    它在组件之间创建最少的耦合。如果要在另一个父组件中使用子组件,这是最简单的方法。这就是Angle组件的全部内容—可重用性

  • 共享服务是另一种选择,尤其是当没有直接的父子关系时

  • *ngModel
    (在子组件中实现
    ControlValueAccessor
    )如果该组件应在表单中使用,则是一个好主意

避免

  • 使用
    @ViewChild()
    获取子组件的引用会使父组件依赖于实现特定接口的子组件

  • 用函数包装对象(或传递方法或对象引用)
    传递方法引入了强耦合。使用共享服务。共享服务也是一个带有方法的类实例,但这是每个开发人员都习惯的标准方式,而且更显式。要将更新推送到参与的组件,请使用


@Output()
是在没有其他选项的具体原因时首先选择的选项。共享服务是另一种选择,尤其是在没有直接的父子关系的情况下。这和我的想法差不多,但为什么呢?是否在发动机罩下对其进行了优化?它使部件之间的耦合量最小。如果要在另一个父组件中使用子组件,这是最简单的方法。这就是Angular组件的全部含义——可重用性。这是一个很好的观点,请随意写下来作为答案,我会接受的