Je connais les modèles utilisés pour nettoyer les abonnements sur des observables comme indiqué ici: angular / rxjs quand dois-je vous désabonner de < code> abonnement code>
J'ai un composant qui modifie un modèle fourni par dynamisme Appliquer des manipulateurs d'événements à divers éléments entre autres. Il existe d'autres abonnements impliqués et nettoyés à l'aide de Je préfère ne pas conserver ce tableau et De la même manière, ont un nettoyage automatique des auditeurs. Quelles sont mes options? P> P> NGRX-PRIST-JUST-DESTRY CODE> Simplifiant tout. Actuellement, je maintiens simplement une gamme distincte de
non subventionnable code> pour collecter et nettoyer lorsqu'il est détruit. P>
3 Réponses :
Vous n'avez pas besoin de nettoyer les gestionnaires d'événements sur des éléments DOM faisant partie du composant, vous n'auriez besoin que de nettoyer un gestionnaire d'événements si l'élément DOM est toujours actif après que le composant soit détruit. P>
La raison pour laquelle vous devez nettoyer les abonnements aux observables renvoyés à partir de services est dû au fait que les observables sont toujours référencés après la destruction du composant, si vous avez un observable créé par le composant, vous pouvez laisser l'ensemble de la composante à la collecte des ordures sans S'inquiéter des abonnements. Même chose pour les éléments DOM. P>
Les éléments sont générés dynamiquement et non statiques, donc je ne sais pas si cela s'applique. Mais même alors, il y a d'autres cas parfaitement bons pour avoir besoin de quelque chose à faire à un certain point d'un cycle de vie des applications, dans ce cas, le nettoyage. Dans tous les cas, je ne préférerais pas laisser le GC le gérer, même si cela pourrait probablement avec 100% de certitude.
C'est ce que la collecte des ordures est pour, si deux objets qui se référent les uns des autres sont tombés dans la collecte des ordures, vous n'avez pas besoin de casser la référence entre elles. Si vous créez dynamiquement un élément DOM qui sera détruit lorsque le composant est détruit, vous n'avez pas besoin de supprimer les gestionnaires d'événements.
Je pense que vous pouvez utiliser Quelque chose comme: p> geventant code> A> Pour créer des observables qui écoutent des événements au lieu d'utiliser
renduer2.listen code>. Et ensuite, utilisez simplement le même modèle de désinscription que vous utilisez pour d'autres observables.
J'ai pensé à faire ça, mais je ne suis pas sûr que ce soit souhaitable. J'ai vu beaucoup de conseils pour éviter d'utiliser des méthodes DOM (dans-) directement et de rester à l'aide de l'API de l'angulaire (c'est pourquoi j'utilisais Renderer2).
Lorsque vous cherchez quelque chose de similaire, je suis tombé sur deux options: p>
Pouvez-vous ajouter le code HTML aussi? Utilisation du
Renderer2 code> devrait être le dernier recours.
Aussi, cela pourrait déjà être répondu: Stackoverflow.com/questions/46688843/...
@Danielhabenicht: Le HTML récupéré de manière dynamique et n'est pas traitée par angulaire. Aussi loin que je sache, doit être traité manuellement (que fait cette composante). Le HTML ressemblerait autrement un peu comme ceci: certains texte div> code>
Ah d'accord. Ensuite, l'autre scaleverflow devrait aider :)