Dans mon projet angulaire, j'ai plusieurs abonnements dans quelques composants. J'utilise donc des propriétés à l'intérieur de celui-ci pour stocker des abonnements et de détruire la fonction, je les désabonne tous. Le problème est que le code devient plus important plus important. Ma question est que votre question est de vous désabonner tous les abonnements à ceux? P>
3 Réponses :
J'ai tendance à stocker tous mes abonnements dans un tableau. D'autres personnes préfèrent d'autres méthodes. juste être créatif. p> p>
Un moyen recommandé de se désabonner à un observable consiste à appeler pour le faire pour toutes les observables à la fois, vous pouvez déclarer un sujet et utiliser Takununtil code> de RXJS: P>
ngUnsubscribe = new Subject();
... code...
ngOnInit() {
this.myObs.pipe(takeUntil(this.ngUnsubscribe))
.subscribe(_ => ...);
}
ngOnDestroy() {
this.ngUnsubscribe.next();
this.ngUnsubscribe.complete();
}
Attention avec le mot approprié code> ... C'est une méthode que certaines personnes aiment. Il n'est pas endossé par l'équipe angulaire ou l'équipe RXJS ou par quiconque de la note. Il a des inconvénients subtils ... votre note est tout à fait incorrecte.
@ Bryan60 j'ai édité ma réponse pour expliquer pourquoi je dis ça.
@ Bryan60 s'est avéré au travail plusieurs fois, n'hésitez pas à laisser des fuites de mémoire dans votre projet
Faites une démonstration de cela se produisant, c'est objectivement faux. Travaillé sur des dizaines d'applications angulaires d'entreprise. La désabonnement n'a jamais causé une fois une fuite. La méthode code> Takentuntille code> est que lorsque les gens le gâchent et le mettent au mauvais endroit.
@ Bryan60 J'ai finalement trouvé le fil dont je parlais (édité la réponse). Nous avons eu une fuite en utilisant ngrx. Un abonnement a été maintenu vivant même après avoir appelé .unsubscribe () code>, nous pourrions le voir clairement dans la console Redux et l'onglet Réseau car il était lié à un appel API. Je ne pense pas que ce fut une «mauvaise utilisation» de NGRX, car il suffit de passer à la solution que je propose corrigé.
Le fil que vous avez lié ne dit rien sur la désinscription ne dispose pas de la souscription dans aucun cas. La réclamation que vous effectuez est 100% objective de manière objective. et la propre pipe async de l'angulaire utilise des utilisations de la tuyau d'Async de l'angulaire: Github. com / angulaire / angulaire / blob / maître / packages / commun / src / ...
@ Bryan60 à droite, mais il a réparé mes problèmes et semble également être (l'une des) la solution recommandée, d'angulaire ou de RxJ. Maintenant, vous voulez dire que ce n'est pas une «réclamation», je vais le changer pour le rendre plus «avis / conseils».
Il y a de nombreuses façons de le faire, mais nous ne pouvons pas éviter la chaudière, vous pouvez utiliser les moyens ci-dessus ou utiliser un décorateur pas besoin de désabonner dans ces cas strong> em> p>
dans le cas d'appels httpclient, car l'observable émit une valeur (succès ou erreur)
et compléter automatiquement. P>
li>
dans le cas ou l'activation de l'abonnement, car le routeur le détruira lorsque le composant est détruit automatiquement p>
li>
Utilisation de pipe ASYNC P>
li>
ol>
Est-ce que cela répond à votre question? Angular / RxJS Quand dois-je vous désabonner de `Abonnement`
Consulter ce fil: Stackoverflow.com/questions/38008334/...