2017-02-06 6 views
1

私は日付オブジェクトを使用してアプリケーションの現在の日付を記録しています。私の見解では日付パイプを使用すると片方向データバインディングが機能しない

私は1つの方法は次のようにバインディングがあります。

previousMonth(){ 
    this.currentDate.setMonth(this.currentDate.getMonth() - 1); 
} 

nextMonth(){ 
    this.currentDate.setMonth(this.currentDate.getMonth() + 1); 
} 

をしかしときに、これらの機能:

<h3>{{ currentDate | date }}</h3> 

とコンポーネントで、私はこのように、この日付を変更する機能を持っている

が発生すると、 currentDate値はビューで更新されません。

日付オブジェクトが更新されていることを確認しました。ビューには表示されません。

デートパイプを取り外すと、いつでも動作します。

誰でもこの問題を解決する方法はありますか?

ありがとうございます!

答えて

2

角度のパイプがという純粋な(またはステートレス)と呼ばれるため、値がビューで更新されません。つまり、入力オブジェクトが変更された場合、入力が再評価されることはありませんが、置換された場合にのみ再評価されます。 documentationから

(部純と不純パイプを参照)

角度は、 入力値に純粋な変更を検出した場合にのみ、純粋なパイプを実行します。純粋な変更は、プリミティブ入力 の値(String、Number、Boolean、Symbol)または変更されたオブジェクト参照 (日付、配列、関数、オブジェクト)への変更です。

は、代わりに次のコードを試してみてください。

previousMonth(){ 
    this.currentDate.setMonth(this.currentDate.getMonth() - 1); 
    this.currentDate = new Date(this.currentDate); 
} 

nextMonth(){ 
    this.currentDate.setMonth(this.currentDate.getMonth() + 1); 
    this.currentDate = new Date(this.currentDate); 
} 
関連する問題