問題タブ [angular2-changedetection]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
angular - ng.core.ChangeDetectionStrategy.onPush はどのように機能しますか?
変更検出戦略が onPush に設定されている場合、コンポーネントの属性が変更された場合、コンポーネントのみを再レンダリングする必要があります。
コード例を次に示します。
ここで、属性が変わらなくてもテンプレートはレンダリングされますか? これはバグですか、それとも onPush を誤解していますか?
javascript - angular2 の `changeDetection: ChangeDetectionStrategy.OnPush` は、上から下の 1 方向でのみ機能しますか?
このプランカーを検討してください
コンポーネント間の関係は次のとおりです。
私たちは持っていることに注意しChild1
てくださいchangeDetection: ChangeDetectionStrategy.OnPush
上記のコードは非常に単純で、まったく同じオブジェクトを にparent
送信するオブジェクトを送信します。child1
child11
child11
次に、オブジェクトのプリミティブを更新します。
parent
との両方child1
のオブジェクトが更新されているchild1
ことがわかります。changeDetection: ChangeDetectionStrategy.OnPush
私はchangeDetection: ChangeDetectionStrategy.OnPush
、上から下の 1 つの方法でしか機能しないと推測しています。
本当?
もしそうなら、これには理由がありますか?
angular - Angular2: angular 外の外部変数を監視する
angular2 以外の変数が変更されたときに監視および更新できるようにしたいと考えています。だから、私はこれを外部のjavascriptファイルに持っているとしましょう:
この変数をコンポーネントのプロパティにバインドするにはどうすればよいですか?
この回答によると、どうやらこれはうまくいくはずです。
しかし、そうではありません。コンソールで変数を変更すると、テンプレートに表示される変数が更新されません。何か不足していますか?
angular - 変更検出をカスタマイズして、Angular2 で参照等価チェックの代わりに詳細なオブジェクト比較を実行する
オブジェクトの配列のフィルタリングを実行するためのフィルター パイプを作成しました。このパイプはfilterArgs
、項目をフィルタリングする基準となるいくつかのプロパティを含むオブジェクトを取得します。
さらに、ユーザーがフィルター引数を設定できる入力フィールドがいくつかあります。オブジェクトのプロパティを直接バインドし、filterArgs
次のようにアイテムにフィルターを適用します。
私のコンポーネントでは、filterArgs
オブジェクトは次のように定義されています (概略図):
したがって、問題は、入力フィールドの 1 つが変更されたときにフィルターが適用されないことです。私がAngularの変更検出を理解している限り、これはfilterArgs
オブジェクトの参照が変更されないため、Angularは変更を検出しないためです。これは予期された動作であり、仕様によるものです。
私の質問は次のとおりです。この問題を解決するために提案された方法は何ですか?
単純なアプローチはfilterArgs
、入力フィールドが変更されるたびに新しいオブジェクトを作成して、このオブジェクトの参照が更新されるようにすることです。その場合、Angular の変更検出が有効になります。しかし、これを行うためのより良い方法が必要です。filterArgs
変更を検出するために「詳細なオブジェクト比較」を実行するようAngularに指示する何らかの属性でプロパティに注釈を付けることができると思います。
angular - {{myArray}} は beta.16 の時点でビューで更新されるようになりました
変更検出が変更されました。
beta.16 より前では、ビューに が含まれて{{myArray}}
いる場合、配列参照を変更しないとバインディングは更新されません。たとえば、push()
配列に項目を追加すると、ビューは更新されず、新しい項目が表示されません。説明は、配列参照が変更されていないため、Angular 変更検出はバインディングを再評価しないということです。このbeta.15 plunkerは、この動作を示しています。
beta.16 (したがって RC.1) では、状況が異なります。配列参照が変更されていなくても、{{myArray}}
バインディングが更新されるようになりました! このRC.1 プランカーを参照してください。
beta.16の ChangeLog を調べましたが、この動作の変更を説明するものは何もありません (ただし、何かを見逃している可能性があります)。この変更の原因と、他に何が影響を受ける可能性があるかを知っている人はいますか?
プランカーコード: