我正在尝试将Angular 4升级到最新版本(7.0.3),直到生产编译为止一切都很好。在其中收到:
ERROR in : Template parse errors:
The pipe 'filter' could not be found ("v class="form-group">
<ul class="ui-select-list">
<li [attr.name]="item.id" *ngFor="let [ERROR ->]item of data | filter : qModel" innerHtml="{{ 'AAA' | translate }}"></li>
</ul>
</div>
"): C:/x/src/app/components/ui/fields/combo/ui.combo.html@2:44
The pipe 'translate' could not be found ("s="ui-select-list">
<li [attr.name]="item.id" *ngFor="let item of data | filter : qModel" inn[ERROR ->]erHtml="{{ 'AAA' | translate }}"></li>
</ul>
</div>
"): C:/x/src/app/components/ui/fields/combo/ui.combo.html@2:79
为重现错误,我从代码中创建了一个最小的存储库:https://github.com/ptrstpp950/myBugInAngular
结果如下:
ng build --prod app
产生上述错误ng build app
可以100%罚款我尝试阅读共享模块中的管道,我尝试根据指南进行更改,但仍然没有成功。
答案 0 :(得分:5)
从tsconfig.json中,您似乎正在Angular 7项目中使用Ivy渲染器
如下-
"angularCompilerOptions": {
"enableIvy": true
}
您可以将其制作为"enableIvy": false
,然后再次尝试生产。
在生产版本(ng build --prod
)期间,由于树木摇晃,它会移除管道。 Ivy尚不完全兼容,只能用于测试目的。在使用Ivy之前,您需要运行ngcc
转换Ivy之前的软件包以包括Ivy定义,ngcc
是@angular/compiler-cli
的命令行工具。
请参阅以下有关常春藤渲染器的链接
答案 1 :(得分:0)
如果您在多个模块中使用它,则可以制作一个Shared module并从该共享模块中导出所有管道。
例如,只需创建一个共享模块,如下所示:
import { NgModule, ModuleWithProviders } from '@angular/core';
import { CommonModule } from '@angular/common';
import { SearchFilterPipe } from './search-qafilter.pipe';
import { CapitalizePipe } from './search-question.pipe';
@NgModule({
imports: [
CommonModule,
SharedRoutingModule
],
declarations: [SearchFilterPipe , CapitalizePipe],
providers: [],
exports: [SearchFilterPipe , CapitalizePipe]
})
export class SharedModule {}
然后将此共享模块导入您喜欢的任何模块中,就可以从那里访问管道而不会引发任何错误。