编辑: 我想基本上扩展ngx-translate提供的管道,如下所示:
import { Pipe, PipeTransform } from '@angular/core';
import { TranslatePipe } from "@ngx-translate/core";
@Pipe({
name: 'msg'
})
export class MsgPipe extends TranslatePipe implements PipeTransform {
transform(value: any, args: any[]): any {
return super.transform(value, args)
}
}
仅当pure设置为false时才有效,所以我认为ngx-translate的加载器还没有准备好。 无论如何检查?这样我就可以保持管道的纯净和工作。
原帖(不相关):
我创建了一个只调用translateService.instant并返回结果的管道。
@Pipe({
name: 'msg',
pure: false
})
export class MsgPipe implements PipeTransform {
constructor(private translateService: TranslateService) {}
transform(value: any, args: any[]): any {
console.log('checked. val = ', value)
return this.translateService.instant(value, args);
}
}
如果不将其标记为纯:false,则管道只返回值。它有它(因为我认为文件加载器已完成)。
我的问题是每个管道被调用大约8次,我可以做任何更改检测,告诉管道一旦检索到值就停止检查吗?
答案 0 :(得分:2)
多次触发的问题是你想要一个纯管道的原因,因为这只会在输入引用发生变化时再次被触发(1)。翻译服务即时的问题是,当你尝试加载某些内容时,翻译可能还没有,所以纯粹的管道对你没用。
对于ngx-translate,您可以使用一个管道,即转换管道(2)。
据我所知,你不能对管道做任何事情让它停止重新评估自己。为此,您可能希望将组件设置为OnPush,以便它只在其中一个输入发生更改时自行更新。
(1)https://angular.io/guide/pipes#pure-and-impure-pipes
(2)https://github.com/ngx-translate/core/blob/master/src/translate.pipe.ts