Angular 4模板“找不到管道”

Posted

技术标签:

【中文标题】Angular 4模板“找不到管道”【英文标题】:Angular 4 template "Pipe could not be found" 【发布时间】:2017-12-08 13:00:07 【问题描述】:

我正在尝试在我的 Angular 4 项目中使用定制管道。无法弄清楚为什么编译器无法识别组件模板中的管道。

QFormat 管道

@Pipe(  name: 'qFormat')
export class QFormatPipe implements PipeTransform ...

共享模块

@NgModule(
    declarations: [QFormatPipe],
    exports: [QFormatPipe]
)
export class SharedModule  

功能模块

@NgModule(
  imports: [SharedModule],
  declarations: [MyComponent]
)
export class FeatureModule 

MyComponent.html

<div>someProp | qformat</div>
                  ^^^^^^^

模板抛出错误:

Angular:找不到管道“qformat”

我错过了什么吗?

【问题讨论】:

一切正常,重启后看看 @Sajeetharan 我在模板中拼错了管道名称。我应该使用大写字母F,如qFormat 【参考方案1】:

在我的情况下,问题是通过 CLI 生成是在 app.module.ts 内添加管道,但我正在使用的组件的模块不同。或者在您的情况下,它可能是您正在使用的模块中未注册管道/错误注册管道

所以一个快速的解决方案是:

删除您创建的管道(不要忘记将其从 app.module.ts)。然后创建一个类似管道的文件夹:然后生成一个 像 'ng g module pipelines/pipes-common' 这样的模块

然后生成像 'ng g pipe myPipeExample` 这样的管道,现在不要忘记添加它

声明:[myPipeExamplePipe] 数组和

导出:[myPipeExamplePipe] 数组

现在将此模块导入您希望它工作的模块中。

This question has multiple very helpful answers

【讨论】:

【参考方案2】:

我的就像忘记将它注册到我的@NgModule 一样简单

【讨论】:

【参考方案3】:

它找不到管道的原因是因为您将管道注册为带有大写 F 的“qFormat”,但在 html 中您有带有小写 f 的“qformat”。这就是发生错误的原因。您的共享模块注册和导入/导出完全正确。 HTML 应该是:

<div>someProp | qFormat</div>

希望对您有所帮助!

【讨论】:

以上是关于Angular 4模板“找不到管道”的主要内容,如果未能解决你的问题,请参考以下文章

如何在生产版本上升级 Angular 7 后修复“错误:模板解析错误:找不到管道‘异步’”

找不到管道:Angular 5 自定义管道

找不到管道“截断”

Angular2:找不到自定义管道

Angular 2单元测试:自定义管道错误找不到管道

Angular Template 解析错误:找不到管道