入力プロパティが変更されている場合は、OnPushでマークされたコンポーネントの変更検出が実行されることを理解します(他の方法もあります)。角2変化の検出:OnPush
私の子コンポーネントには入力プロパティはなく、コンポーネントにはサービスが注入されています。私は、この子コンポーネント内のサービスによって公開されているobservableを購読しました。今、subscribeコールバックメソッドの中で、私は子コンポーネントのプライベートプロパティの値を変更します。コンポーネントのテンプレートは、このプロパティに結合されています。
問題は、オブザーバがイベントをパブリッシュして、サブスクライバコールバックが呼び出され、プロパティ値が変更されたが、ビューに変更が反映されない場合です。 UIは、自分のページのどこかをクリックすると更新されます。
changeDetection: ChangeDetectionStrategy.OnPush
更新1:Plunkerだから
非同期パイプまたは 'cdRef.markForCheck()'を使ってみましたか?あなたのコードはどこですか? – yurzui
テンプレートはコンポーネント例の文字列のプライベートプロパティにバインドされるため、非同期パイプは使用できません。 CDR.markForCheck()CDを読み込んでanscetorのルートコンポーネントまで戻ってくるので、私はそれを読んだのですが、残念です。私は、プランナーを投稿する方法を知らない、Googleとすぐに追加します。ありがとう。 – thinkmmk
いいえ、 'markForCheck'は先祖のルートに戻っていません。それは 'ApplicationRef.tick()'です。 'markForCheck'は、コンポーネントが次の変更検出時にスキップされないようにします。 –