0

编辑:我想基本上扩展 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 次,我可以通过更改检测来告诉管道在检索到值后停止检查吗?

4

1 回答 1

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

于 2017-09-26T14:53:20.090 回答