angular - 在另一个管道中注入 AsyncPipe
问题描述
用例:我定义了一个CustomError
这样的:
interface {
message?: string;
i18nMessage?: string;
}
我定义了一个DisplayErrorPipe
来显示错误。如果message
已定义,则管道将其返回。否则,如果i18nMessage
已定义,则管道返回 a 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
?
解决方案
您只需要在声明组件的模块中将 AsyncPipe 注册为提供程序。我认为 Angular 默认不会在 DI 系统中将它们注册为服务。
推荐阅读
- r - 多年来使用 Tidycensus 创建大型国家数据集
- python - 在 MRO 中装饰顶部功能
- php - 尽管拥有所有必要的权限,但无法通过 Facebook Marketing API 获取视频详细信息
- android - android在同一网络中的打印机上打印html文档
- r - 用 r 中行的最小值替换 0 值
- python - 如何解决 Django 中的 Value Error 分配错误?
- java - 具有分类依赖的 Intellij Maven 多模块项目
- android - RoomDB Android 上特定字段的 @Update 未正确更新
- ios - Sqlite 查询不返回 0 值
- javascript - 使用 refs 生成并聚焦到平面列表中的特定文本输入