ng2:相当于 require

ng2: Equivalent of require

在 angular 1.x 中,我们可以通过在指令中要求它来引用 parent 控制器。但是,由于 angular 2 中的整个命名为 switch-over,我似乎真的无法找到该功能的等效项?

到目前为止我尝试过的事情:

我不太了解 Angular1,因此我无法说出 require 的确切用途或用途。

对于您问题中提到的项目符号:

  • 通常您使用模板绑定来连接父项和子项

父模板

<child [childInput]="parentValue" (childOutput)="doSomethingInParent()">
  • 服务是每个提供商的单例。同一个提供者将始终 return 同一个实例,但你可以多次提供同一个服务,这样它就不再是真正的单例了。因此,您提供服务的位置定义了将其视为单例的范围。当您在组件中提供它时,该组件实例和所有子组件将获得相同的实例(只要不是子组件提供相同的类型)。

这种 DI 行为可以防止您在问题中提到的冲突。

  • 模板变量更适合用来指代兄弟姐妹
<child1 [child1Input]="child2.child2Prop" 
    (child1Output)="child2doSomethingInChild2()">
<child2 #child2></child2>
  • 如果知道父组件的类型,可以要求将其注入到子组件的构造函数中
constructor(@Host() private parent:ParentComponent) {}

这在知道父项是什么的递归组件(如树)中可能特别方便。在这种情况下,可能需要额外的装饰器

constructor(@Optional() @SkipSelf() @Host() private parent:ParentComponent) {}

哪里

  • @Optional()是为了让根组件避免因为没有同类型的parent被注入而引发异常
  • @SkipSelf() 避免组件本身在与它实际想要注入的父级类型相同时被注入。 DI 总是从组件本身开始查找供应商。

另见 Inject parent component of the same type as child component