2016-04-14 7 views
1

角度2にTranslationPipeを作成しています。これは文字列を入力として受け取り、TranslationServiceから変換を取得してビューに返します。入力を変更せずにパイプリロードをトリガーする

<div>{{ 'hello world' | translate }}</div>
は次のようになります:例えば、次のように

フェルデン
HEJ私は、ビューの言語を変更し、ページ全体をリロードすることなく、ページ上のすべてのテキストを更新するための方法をしたいです。ページ上にすべてTranslationPipeのリロードをトリガーする方法はありますか、またはアプリケーション内のすべてのパイプさえできますか?

一般的に、角度でパイプがトリガされる唯一の方法は、渡される変数の変更によるものです。入力は文字列ですが、代わりに手動でトリガーを発生させる必要があります。すべての翻訳テキストを格納

テキストオブジェクトはので、私は別の解決策は、この <div> translationObject['hello world'] </div> を行うことであろう知っているサービスに保存されているが、それは、設計者にはあまり読みやすさを持っています。

答えて

2

pure: falseとすると、Angular runが検出を変更するたびにパイプが評価されます。

@Pipe({ 
    name: 'xxx', 
    pure: false 
}) 

これはかなり高価であると考えてください。

別の方法として、言語を追加パラメータとして渡すこともできます。次に、Angularは言語が変更されたときにもパイプを評価します。

+0

{{'my text' |翻訳:languageVar}}? – andykais

+0

正確です。 。 。 。 。 。 –

+1

@GünterZöchbauer私は| filterargs:objectWithProperties。このパイプは、あなたが言及したように不純なパイプを使用する場合にのみ評価されます。しかし、本当に高価です。 objectWithPropertiesのプロパティが変更されたときに、パイプが評価されません。 –

2

パイプにはパラメータがあり、パイプを必要としない場合でも、パイプの変更トリガーパイプtransformが機能します。

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

// component 
trigger: number = 0; 

ngOnInit() { 
    setInterval(() => this.trigger = Math.random(), 60 * 1000) 
} 
関連する問題