0
votes

Comment se désabonner de tous les observables dans un composant à la fois en angulaire

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?


2 commentaires

3 Réponses :


2
votes

J'ai tendance à stocker tous mes abonnements dans un tableau. XXX

D'autres personnes préfèrent d'autres méthodes. juste être créatif.


0 commentaires

0
votes

Un moyen recommandé de se désabonner à un observable consiste à appeler xxx pré>

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();
}


7 commentaires

Attention avec le mot approprié ... 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 Takentuntille 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 () , 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».



0
votes

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 pour cela, mais gardez à l'esprit qu'il y a des exceptions où vous n'avez pas ' t faut se désabonner:

pas besoin de désabonner dans ces cas

  1. dans le cas d'appels httpclient, car l'observable émit une valeur (succès ou erreur) et compléter automatiquement.

  2. dans le cas ou l'activation de l'abonnement, car le routeur le détruira lorsque le composant est détruit automatiquement

  3. Utilisation de pipe ASYNC


0 commentaires