在不改变输入的情况下触发管道重新加载

and*_*ais 1 javascript angularjs angular

我正在创建一个TranslationPipe角度2,该角度将字符串作为输入并从a获取转换TranslationService并将其返回到视图。例如:

<div>{{ 'hello world' | translate }}</div>
成为:
hej verden

我想要一种方法来更改视图的语言,并更新页面上的所有文本,而无需重新加载整个页面。有没有一种方法可以触发TranslationPipe页面上所有s甚至应用程序中所有管道的重新加载?

通常,触发管道角度的唯一方法是更改​​传递给它的变量。尽管输入是字符串,所以我需要手动触发触发器。

存储所有翻译文本的文本对象存储在服务中,因此我知道另一种解决方案是这样做, <div> translationObject['hello world'] </div> 但对设计人员而言可读性较差。

Gün*_*uer 5

pure: false将管每次评价角运行变化检测。

@Pipe({
  name: 'xxx',
  pure: false
})
Run Code Online (Sandbox Code Playgroud)

认为这是相当昂贵的。

另一种方法是将语言作为附加参数传递,然后当语言更改时,Angular也会评估管道。


geo*_*lev 5

管道可以具有参数,即使您不需要它们(或不是全部),它们的更改也会触发管道transform功能。

// html
<p class="time-stamp">{{message.sent | timeAgo:trigger}}</p>

// component
trigger: number = 0;

ngOnInit() {
  setInterval(() => this.trigger = Math.random(), 60 * 1000)
}
Run Code Online (Sandbox Code Playgroud)