角度依赖注入 - 使用T?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了角度依赖注入 - 使用T?相关的知识,希望对你有一定的参考价值。

我正在写一个非常简单的指令,本质上让我指向另一个类实例作为提供者(不要问我为什么,我知道它是愚蠢的,但除此之外)。因此,我在我的提供者声明中使用“useExisting”。这当然有效,但我不想为每一类T创建一个指令。

有没有办法做这样的事情:

@Directive({
  selector: '[appMyGenericDirective]',
  providers: [{provide: NG_VALIDATORS, useExisting: T, multi: true}]
})
export class MyGenericDirective<T> {

}

哪个“T”是我想要'使用'的类?

答案

好吧,不知何故,html模板必须指定T。如果您不想为每个T声明一个单独的指令,您可以尝试声明一个将T作为@Input()的指令:

@Directive({
  selector: '[freakyValidator]',
  providers: [{provide: NG_VALIDATORS, useFactory: (freaky) => freaky.validator, deps:[FreakyValidatorDirective], multi: true}]
})
export class FreakyValidatorDirective {
  constructor(private injector: Injector) {}

  @Input()
  set freakyValidator(validatorClass) {
    this.validator = this.injector.get(validatorClass);
  }

  validator: Validator;
}

(前面的代码是未经测试的,我有点不确定该指令或其提供者是否首先被实例化。但它可能值得一试)

以上是关于角度依赖注入 - 使用T?的主要内容,如果未能解决你的问题,请参考以下文章

spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段

Android 片段和依赖注入

Android片段和依赖注入

如何使用带有角度依赖注入的打字稿继承

角度 6 依赖注入

手动TypeScript角度依赖注入在ChangeDetectorRef上失败