在另一个管道中注入AsyncPipe

时间:2019-02-28 15:27:03

标签: angular

用例:我这样定义了CustomError

interface {
  message?: string;
  i18nMessage?: string;
}

然后我定义一个DisplayErrorPipe来显示错误。如果定义了message,则管道将其返回。否则,如果定义了i18nMessage,则管道返回一个Observable<string>(它将发出翻译后的错误)。

因此,应该像这样使用管道:

{{ customError | displayError }}

DisplayErrorPipe可能返回一个Observable,但我希望避免每次都用管道传输async

{{ customError | displayError | async }}

因此,我需要在AsyncPipe中注入DisplayErrorPipe,以便在管道返回async时自动对Observable<string>进行管道输送。

所以我尝试了:

constructor(private asyncPipe: AsyncPipe) {}

但是我得到一个错误:

  

NullInjectorError:AsyncPipe没有提供程序!

我找不到应该导入哪个模块才能注入AsyncPipe

直到现在,我唯一的解决方案是:

constructor(private _ref: ChangeDetectorRef) {
  const asyncPipe = new AsyncPipe(_ref);
}

此方法有效,但如果AsyncPipe的构造函数发生更改,则可能会中断。

问题:如何正确注入AsyncPipe

1 个答案:

答案 0 :(得分:1)

您只需要在声明组件的模块中将AsyncPipe注册为提供程序即可。我认为Angular默认不会在DI系统中将它们注册为服务。