Angular 如何声明可选的注入@input参数?

Angular 如何声明可选的注入@input参数?,angular,dependency-injection,Angular,Dependency Injection,我正在使用组件工厂动态生成动态组件。将向工厂传递一组数据,其中包括生成组件的输入参数: <app-field-factory [componentData]="componentSeedData"></app-field-factory> 然而,我不知道如何使其中一个输入成为可选的(即,它可能存在也可能不存在)。我尝试过各种方法,比如添加一个“?”并将this.injector.get行包装成一个条件行。我得到的只是一个“没有提供…”错误 假设在某些情况下,父输入可能不

我正在使用组件工厂动态生成动态组件。将向工厂传递一组数据,其中包括生成组件的输入参数:

<app-field-factory [componentData]="componentSeedData"></app-field-factory>
然而,我不知道如何使其中一个输入成为可选的(即,它可能存在也可能不存在)。我尝试过各种方法,比如添加一个“?”并将
this.injector.get
行包装成一个条件行。我得到的只是一个“没有提供…”错误


假设在某些情况下,
父输入可能不存在。如何在生成的组件中说明这一点?

使用以下代码将其设置为可选:

@Input() parent?: string;

组件中的每个输入都可以看作是可选的。如果在使用组件时没有定义绑定,则该值将保持未初始化状态或使用默认值初始化

class MyComponent {
   @Input() v;
//在更改检测期间,绑定
v
将设置为
32
//绑定
v
将保持单元化

请注意,对于动态组件,
@Input()
不会由Angular自动处理,因为正确设置输入绑定需要知道编译期间如何使用组件,而对于动态组件则不是这样

另见:


根据
注射器。获取签名

abstract get<T>(token: Type<T>|InjectionToken<T>, notFoundValue?: T): T;

在这种情况下,angular不会抱怨未解析的提供程序。它将返回
null
。然后,如果(this.parent)

我尝试了,但仍然得到了无提供者错误,那么您可以简单地使用类似于
的条件。还尝试了
@可选
,结果相同。我想问题与使用喷油器有关。。?我真的不明白…所以你到底需要注射器?为什么使用
@Input()
injector
@Input()
是两个不相关的东西
abstract get<T>(token: Type<T>|InjectionToken<T>, notFoundValue?: T): T;
this.parent = this.injector.get('parent', null);