問題タブ [rxjs-subscriptions]

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 に答える
290 参照

angular - 角度のパラメーター変更ですべてのサブスクリプションのサブスクライブを解除する方法

ジョブのジョブの詳細を表示できるページを開発しています。この目的のために、NGRXストアを使用してアクションをディスパッチし、それをサブスクライブして以下のようなデータを表示しています

ngondestroy では、以下のようにすべてのサブスクリプションのサブスクリプションを解除しています。

これは正常に機能していますが、ジョブのリストを含むサイドナビメニューがあり、各ジョブをクリックすると、クリックされたジョブの詳細でジョブの詳細ページが更新されます。ここでは、各ジョブをクリックすると、最初のサブスクリプションが何度も発生し、ディスパッチ API が複数回呼び出されます。これは、以前のジョブ サブスクリプションのサブスクリプションを解除できないためです。

パラメータの変更時にその特定のコンポーネントのすべてのサブスクリプションのサブスクライブを解除するにはどうすればよいですか、またはこの問題を解決できる他の方法があります。助けていただければ幸いです、ありがとう!!!

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

angular - Router サブスクリプション内で subscribe メソッドを呼び出すときは、ActivatedRoute からサブスクリプションを解除する必要がありますか?

Router通常、次の理由により、またはActivatedRoute明示的に購読を解除する必要はないことを読みました。

ActivatedRoute とそのオブザーバブルは、ルーター自体から隔離されています。Router はルーティングされたコンポーネントが不要になったときにそれを破棄し、注入された ActivatedRoute も一緒に終了します。

ソース: ActivatedRoute (例: params) オブザーバブルからサブスクライブを解除する必要がありますか?

ただし、親コンポーネントsubscribe()で繰り返し呼び出しています。このコンポーネントは、ユーザーが Web アプリケーションから移動するか、Web サイトを閉じたときにのみ破棄されるため、これらのサブスクリプションがずっとアクティブなままになるのではないかと心配しています。ActivatedRoute.firstChild.paramMapapp.componentparamMap

サブスクリプション呼び出しはサブスクリプション内で行われ、Router.events次のようになります。

誰かが別のコンポーネント/ページに移動するたびactivatedRoute.firstChild.paramMapに、再度サブスクライブされます。これはルーター サブスクリプション内で行う必要があり、イベントが のインスタンスである場合にのみ行う必要があります。これNavigationEndは、その前に URL パラメーターがまだ使用できないためです。

私の質問は、これらのサブスクリプションはどうなりますか? 彼らは自動的に購読を解除しますか、それとも新しいものごとに手動で購読を解除する必要がありますか? 後者の場合、どうすれば効果的にそれを行うことができますか?

activatedRoute.firstChild.snapshot.paramMap.myParameter何もサブスクライブする必要がないので、使用するようにアドバイスする人もいるかもしれません。ただし、snapshot同じコンポーネントを再利用しているときに url パラメータが変更された場合は機能しません。だから私はそれを使用することはできません。

ありがとうございました