角@Optional指令注入被忽略

时间:2019-05-21 18:49:03

标签: angular

我收到这样的错误

action1
action2 

actionHandler
action1
action2 

有服务声明。

Can't resolve all parameters for ControlErrorsDirective: (?, [object Object], [object Object], [object Object], [object Object], ?).

我看到注入问题与可选的指令服务有关。是的,指令未设置在组件中。但是它们是可选的。为什么调用该错误? 是的,我向模块提供了所有指令。

    constructor(
        @Optional() @Host() private form: FormSubmitDirective,
        private control: NgControl,
        private resolver: ComponentFactoryResolver,
        public viewContainerRef: ViewContainerRef,
        @Inject(FORM_ERRORS) private errors,
        @Optional() controlErrorContainer: ControlErrorContainerDirective
      ) {

但是它不起作用。该错误似乎微不足道。但是我看不到。 在这里效果很好。 https://stackblitz.com/edit/angular-terms-and-conditions-reactive-forms?embed=1&file=src/app/form-errors.ts 问候。

1 个答案:

答案 0 :(得分:1)

这类错误,例如:

  

无法解析Something的所有参数:(?,

通常意味着在执行装饰器时未定义构造函数中用于参数的类型。

发生这种情况的原因有很多:

  • 在DI中使用的类之间具有循环依赖关系

  • 您将所有类都放在一个文件中,并尝试在声明类型之前使用type。所以订购很重要。

对于您而言,您将所有类都写在一个文件中,但是尝试在FormSubmitDirective类之前使用ControlErrorContainerDirectiveControlErrorsDirective,这是造成问题的主要原因。