用例:我这样定义了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
?
答案 0 :(得分:1)
您只需要在声明组件的模块中将AsyncPipe注册为提供程序即可。我认为Angular默认不会在DI系统中将它们注册为服务。