ng2:相当于 require
ng2: Equivalent of require
在 angular 1.x 中,我们可以通过在指令中要求它来引用 parent 控制器。但是,由于 angular 2 中的整个命名为 switch-over,我似乎真的无法找到该功能的等效项?
到目前为止我尝试过的事情:
- 我看到的一种方法是将 parent @input 到 child,但这似乎有点多。
- 我看到的另一种方式是使用服务,但这让我有些恐惧,因为据我所知,服务仍然是单例,因此其他组件现在可能会在 child不同的组件(如果 child 引用了服务)...
- 最后它使用了这些局部变量(带有主题标签的),但看起来与输入的第一个选项有点相同。
我不太了解 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
在 angular 1.x 中,我们可以通过在指令中要求它来引用 parent 控制器。但是,由于 angular 2 中的整个命名为 switch-over,我似乎真的无法找到该功能的等效项?
到目前为止我尝试过的事情:
- 我看到的一种方法是将 parent @input 到 child,但这似乎有点多。
- 我看到的另一种方式是使用服务,但这让我有些恐惧,因为据我所知,服务仍然是单例,因此其他组件现在可能会在 child不同的组件(如果 child 引用了服务)...
- 最后它使用了这些局部变量(带有主题标签的),但看起来与输入的第一个选项有点相同。
我不太了解 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