これには合理的な説明があると確信していますが、なぜオブジェクトのプロパティがビューで更新されるのに、プリミティブ型の変数は更新されないのか、本当に困惑しています。ngrx/store のオブザーバブルを使用しているため、それが原因である可能性がありますが、他の非同期の状況でこれを見たような気がするので、理解しようとしています。
たとえば、次のテンプレートがあります。
<h1>{{data.counter}}</h1>
<h1>{{dataCounter}}</h1>
次に、コンポーネントの TypeScript クラスには、次のようなものがあります。
ngOnInit() {
this.store.select('mainStoreReducer')
.subscribe((data: MyState) => {
this.zone.run(() => {
this.dataCounter = data.counter;
this.data = data;
});
}
画面を見ると、dataCounter 変数を表すテキストは更新されていませんが、data.counter を表すテキストは更新されています。zone.js を強制的に実行するための追加のブロックでさえ、役に立ちません。dataCounter は引き続き元のテキストを表示します (注意: 実際には、dataCounter は初期状態の値を取得しますが、後でサブスクライブが開始されたときに値が更新されることはありません。data.counter のテキストは常に更新されます)。誰かがこれを説明できますか?
ここに、私が説明している状況の plunkr があります: https://plnkr.co/edit/gEeAKK31Yo6kATjFQY08?p=templates