問題タブ [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.

0 投票する
1 に答える
309 参照

javascript - アプリが最初にロードされたときの Angular2 変更検出

したがって、最初にアプリをロードすると、静的コンテンツのみがロードされます。つまり、非同期パイプがあるコンテンツはまったくレンダリングされません (通常、サーバーの応答後にレンダリングされるはずのコンテンツ)。動的コンテンツは、リンクなどの上にカーソルを置いたときにのみ読み込まれます。変化検出がまったくトリガーされていないように感じます。なぜこれが起こるのか誰にも分かりますか?どんな助けでも大歓迎です。しばらくこれで立ち往生しています。ありがとう。

0 投票する
4 に答える
109639 参照

angular - markForCheck() と detectChanges() の違いは何ですか

ChangeDetectorRef.markForCheck()とはどう違いChangeDetectorRef.detectChanges()ますか?

SOの違いに関する情報のみを見つけましNgZone.run()たが、これら 2 つの関数の違いはありません。

ドキュメントへの参照のみを含む回答については、いくつかの実際的なシナリオを示して、どちらかを選択してください。

0 投票する
1 に答える
594 参照

angular - Firebase が Angular 2 で変更検出を繰り返しトリガーしないようにするにはどうすればよいですか?

Firebase は、Angular/Zone モンキー パッチ WebsocketsetIntervalなどのために、変更検出をトリガーする多くの内部非同期呼び出しを使用します。アプリを操作していないときでも、常に変更検出のカスケードが発生していることがわかります。特にモバイルでは速度が低下します。

このデフォルトの動作は便利かもしれませんが、現在私が Firebase を使用している方法では、ビューを更新する必要がある時期をかなり厳密に制御できます。そのため、Firebase からのコールバックは、いずれにせよ変更検出が手動で行われるような方法で使用されます。

OnPush私が取り組んでいる変更検出戦略を に設定すると、ここで役立つことはわかっていますが、あらゆる角度からこれを攻撃したいと考えています。

私はゾーンに精通してrunOutsideAngularいますが、すべての非同期呼び出しが Firebase モジュール内で発生しているため、ここに適用するかどうかはわかりません。

Firebase に角度ゾーンの外ですべてのビジネスを行わせるにはどうすればよいですか?


編集:問題を示すコード例:

0 投票する
2 に答える
893 参照

angular - Angular2 - 親オブジェクトが変更されたことを子に通知し、子がそのテンプレート内で ngIf を再起動できるようにします

この質問と同様の問題がありますが、2つの回答のどちらもうまくいかないため、質問が古くなっているようです。

子コンポーネントは、入力として渡された複雑なオブジェクトからデータをレンダリングするだけですProposal(ユーザー コントロールはまったくないため、イベントを発生させたり、何かを渡したりする必要はありません)。

テンプレートの関連部分は次のとおりです。配列を反復し、プロパティをチェックして、次を使用して異なるテキストを表示します*ngIf

親で、ユーザーはチェックボックスをクリックして「is_fitted」を true または false に変更できます。親はドメイン ドライブ フォームを使用しています。親のngOnInitには、次のコードがあります。

プロパティを正しく更新します。私はそれを見ることができますconsole.log*ngIf問題は、埋め込まれたroom.is_fitted値が変更されたときに、子に再起動/再処理させるにはどうすればよいですか?

ViewChild を使用してこのアイデアを実装しようとしたので、ngOnInit の上記のコードは次のようになります。

しかし、それもうまくいきません。子のnotifyChangeが正常に呼び出されました:

ビューは更新されません -*ngIfロジックは再処理されません。

0 投票する
1 に答える
3587 参照

angular - 動的コンポーネントのAngular 2 OnPush変更検出

内部にさまざまな種類のコンポーネントを動的に作成する Angular コンポーネントがあります。フック@Inputを介して独自のプロパティを子コンポーネントのプロパティにバインドします。OnChanges

このバインディングは、子コンポーネントの変更検出がデフォルトに設定されている場合に正常に機能します。次に、新しい入力が検出され、コンポーネント テンプレートが更新されます。

ただし、変更検出が OnPush の場合は機能せず、変更は検出されません。新しい不変オブジェクトである文字列がコンポーネント@Inputプロパティに割り当てられているため、変更が検出されるはずです。

デモンストレーションするプランカーは次のとおりです: https://plnkr.co/edit/0wHQghtww2HXVbC27bC1

この親から動的な子へのプロパティ バインディングを ChangeDetectionStrategy.OnPush で動作させるにはどうすればよいですか?