如何创建新的ngx-translate管道(纯粹与不纯)

时间:2017-09-26 14:43:34

标签: angular typescript angular2-changedetection angular-pipe ngx-translate

编辑: 我想基本上扩展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次,我可以做任何更改检测,告诉管道一旦检索到值就停止检查吗?

1 个答案:

答案 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