角度依赖注入 - 使用T?

问题描述 投票:-1回答:1

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

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

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

}

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

angular dependency-injection
1个回答
1
投票

好吧,不知何故,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;
}

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

© www.soinside.com 2019 - 2024. All rights reserved.