問題タブ [behaviorsubject]
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 - getter を使用した ChangeDetection
私はExpressionChangedAfterItHasBeenCheckedError
getter と BehaviorSubject を取得しています (楽しいですよね?)。
これがコンポーネントのコードです
commonService.windowHeight
BehaviorSubject です。通常のブラウザでこのコードを実行すると、すべてがうまくいきます。
コンポーネントで単体テストを実行しようとすると、問題が発生します。すべてのインポート、宣言、およびプロバイダーは問題なく、このような単純なテストでも問題ありません
それはスローしますError: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: '0px'. Current value: '865px'.
ここで何が問題になる可能性がありますか? 環境: Angular 4.0.2、Angular CLI、カルマ、ヘッドレス Chrome。
ありがとう!
angular - Angular 4 - サービスでの rxjs BehaviorSubject の使用
私のサービスコードは以下のようになります -
データサービス
検索コンポーネント(上記のサービスにヒットし、サブスクライブも行う) は以下のようになります -
上記のように、ログが出力されず、コンソールにエラーが表示されないため、監視コンポーネントのサブスクライブ メソッド内に制御が入りません。適切な方法で BehaviorSubject を使用しているかどうかはわかりません。
次のリンクをたどってみました -
Angular 2 - 行動主体と観察対象? →こちらに記載のサブスクライブには入っていません。
http-observables -> この方法を試してみると、サブスクライブに入りますが、ログのエラーがスローされます -
サービスからデータを取得する前でもコンポーネント ログが印刷されるため、null のプロパティ xyz を読み取れません 。上記のエラーが発生した後、サービス ログが後で印刷されます。
私の意図は、サービスにヒットする SearchComponent 自体から BehaviorSubject にサブスクライブすることではありません。コンポーネントのサービスから値を取得するかどうかをテストしようとしています。サブスクライブの構文はすべてのコンポーネントで同じであるため、 serviceRequestDto値を必要とする他のコンポーネントからサブスクライブするのと同じくらい良いと思います。
更新 1:
ブランドンの提案に従って ReplaySubject(1) を使用しようとしましたが、コンポーネントでサブジェクトをサブスクライブしているときにエラーが発生しました。
TypeError: undefined(…) のプロパティ 'name' を読み取れません
更新されたサービスコードは次のようになります。
以前、サービスコードで次を使用していたことに注意してください-
更新された検索コンポーネントのコードは次のようになります -
以前のコンポーネント コードがサブジェクトにサブスクライブしていた方法は異なり、エラーはありませんでしたが、コントロールがコンポーネントのサブスクライブ内に入ることはありませんでした。
私の最初のコードは、現在投稿したものとは異なり、次のリンクに基づいていました- delegation-eventemitter-or-observable-in-angular2