首页 > 解决方案 > 在另一个管道中注入 AsyncPipe

问题描述

用例:我定义了一个CustomError这样的:

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

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

所以管道应该这样使用:

{{ customError | displayError }}

DisplayErrorPipe可能会返回一个 Observable 但我想避免async每次都需要管道

{{ customError | displayError | async }}

因此,我需要注入AsyncPipeDisplayErrorPipe以便async在管道返回Observable<string>.

所以我尝试了:

constructor(private asyncPipe: AsyncPipe) {}

但我收到一个错误:

NullInjectorError:没有 AsyncPipe 的提供者!

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

到目前为止,我唯一的解决方案是:

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

这可行,但如果 AsyncPipe 的构造函数发生更改,则可能会中断。

:如何正确注射AsyncPipe

标签: angular

解决方案


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


推荐阅读