【发布时间】:2018-11-11 08:54:45
【问题描述】:
我在 Angular 5 中有一个非常简单的管道
import { Pipe, Injectable } from '@angular/core';
@Pipe({
name: "default"
})
@Injectable()
export class DefaultPipe {
transform(value: string, fallback: string): string {
let image = "";
if (value) {
image = value;
} else {
image = fallback;
}
return image;
}
}
我以非常简单的方式使用它只是为了演示
<div>
{{ 'somthing' | default }}
</div>
我还在 app.module.ts 的 provider 部分添加了
@NgModule({
declarations: [
AppComponent,
DefaultPipe // <-- Here
],
imports: [
....
],
providers: [
....
],
bootstrap: [AppComponent]
})
export class AppModule { }
当你在普通组件中使用它时,例如
app.component.html
它工作正常,但如果你在子路由中使用的组件中使用它,则会出现此错误:
compiler.js:486 未捕获错误:模板解析错误:管道 找不到“默认”(“
{{[错误 ->] '东西' |默认 }} "): ng:///AppRoutingModule/LoginComponent.html@75:6 在 syntaxError (compiler.js:486) 在 TemplateParser.webpackJsonp../node_modules/@angular/compiler/esm5/compiler.js.TemplateParser.parse (compiler.js:24674) 在 JitCompiler.webpackJsonp../node_modules/@angular/compiler/esm5/compiler.js.JitCompiler._parseTemplate (compiler.js:34629) 在 JitCompiler.webpackJsonp../node_modules/@angular/compiler/esm5/compiler.js.JitCompiler._compileTemplate (compiler.js:34604) 在 compiler.js:34505 在 Set.forEach() 在 JitCompiler.webpackJsonp../node_modules/@angular/compiler/esm5/compiler.js.JitCompiler._compileComponents (compiler.js:34505) 在 compiler.js:34375 在 Object.then (compiler.js:475) 在 JitCompiler.webpackJsonp../node_modules/@angular/compiler/esm5/compiler.js.JitCompiler._compileModuleAndComponents (compiler.js:34374)
解决:
我将此模块添加为 share.module.ts
import { NgModule } from '@angular/core';
import { DefaultPipe } from './core/pipes/default.pipe';
@NgModule({
declarations: [DefaultPipe],
exports: [DefaultPipe]
})
export class SharedModule { }
并在 2 个地方使用它,一个在 app.module.ts:
@NgModule({
declarations: [
AppComponent,
],
imports: [
...
// other modules
...
SharedModule
],
providers: [
....
],
bootstrap: [AppComponent]
}) 导出类 AppModule { }
一个在 route.module.ts
@NgModule({
declarations: [
....
],
imports: [
....
SharedModule
],
exports: [
RouterModule,
]
})
export class AppRoutingModule { }
【问题讨论】:
-
能否请您添加声明
LoginComponent的模块? -
为什么要投反对票?你付出了所有的努力来解决一个有很多解释的问题,然后你去,你得到了一个投票,非常感谢!!!
标签: angular typescript angular-pipe