Maison interface Web js tutoriel Une brève discussion sur la désinscription dans Angular

Une brève discussion sur la désinscription dans Angular

Jan 16, 2018 am 09:02 AM
angular 取消 订阅

Cet article présente principalement une brève discussion sur le moment d'annuler un abonnement dans Angular. L'éditeur pense que c'est plutôt bien, je vais donc le partager avec vous maintenant et le donner comme référence. Suivons l'éditeur et jetons un œil. J'espère que cela pourra aider tout le monde.

Vous savez peut-être que lorsque vous vous abonnez à un objet observable ou configurez un écouteur d'événements, à un moment donné, vous devez effectuer une opération de désabonnement pour libérer la mémoire du système d'exploitation. Sinon, votre application pourrait souffrir de fuites de mémoire.

Examinons ensuite quelques scénarios courants dans lesquels les opérations de désabonnement doivent être effectuées manuellement dans le hook de cycle de vie ngOnDestroy.

Scénario de libération manuelle des ressources

Formulaire


export class TestComponent {

 ngOnInit() {
  this.form = new FormGroup({...});
  // 监听表单值的变化
  this.valueChanges = this.form.valueChanges.subscribe(console.log);
  // 监听表单状态的变化              
  this.statusChanges = this.form.statusChanges.subscribe(console.log);
 }

 ngOnDestroy() {
  this.valueChanges.unsubscribe();
  this.statusChanges.unsubscribe();
 }
}
Copier après la connexion

Ce qui précède la solution fonctionne également. S'applique à d'autres contrôles de formulaire.

Route


export class TestComponent {
 constructor(private route: ActivatedRoute, private router: Router) { }

 ngOnInit() {
  this.route.params.subscribe(console.log);
  this.route.queryParams.subscribe(console.log);
  this.route.fragment.subscribe(console.log);
  this.route.data.subscribe(console.log);
  this.route.url.subscribe(console.log);
  
  this.router.events.subscribe(console.log);
 }

 ngOnDestroy() {
  // 手动执行取消订阅的操作
 }
}
Copier après la connexion

Service de rendu


export class TestComponent {
 constructor(
  private renderer: Renderer2, 
  private element : ElementRef) { }

 ngOnInit() {
  this.click = this.renderer
    .listen(this.element.nativeElement, "click", handler);
 }

 ngOnDestroy() {
  this.click.unsubscribe();
 }
}
Copier après la connexion

Observables infinis

Lorsque vous utilisez l'opérateur interval() ou fromEvent(), vous créez un objet observable infini. Dans ce cas, lorsque nous n’avons plus besoin de les utiliser, nous devons nous désabonner et libérer les ressources manuellement.


export class TestComponent {
 constructor(private element : ElementRef) { }

 interval: Subscription;
 click: Subscription;

 ngOnInit() {
  this.interval = Observable.interval(1000).subscribe(console.log);
  this.click = Observable.fromEvent(this.element.nativeElement, 'click')
              .subscribe(console.log);
 }

 ngOnDestroy() {
  this.interval.unsubscribe();
  this.click.unsubscribe();
 }
}
Copier après la connexion

Redux Store


export class TestComponent {

 constructor(private store: Store) { }

 todos: Subscription;

 ngOnInit() {
   /**
   * select(key : string) {
   *  return this.map(state => state[key]).distinctUntilChanged();
   * }
   */
   this.todos = this.store.select('todos').subscribe(console.log); 
 }

 ngOnDestroy() {
  this.todos.unsubscribe();
 }
}
Copier après la connexion

Pas besoin de libérer manuellement la ressource scénarios

AsyncPipe


@Component({
 selector: 'test',
 template: `<todos [todos]="todos$ | async"></todos>`
})
export class TestComponent {
 constructor(private store: Store) { }
 
 ngOnInit() {
   this.todos$ = this.store.select(&#39;todos&#39;);
 }
}
Copier après la connexion

Lorsque le composant est détruit, le pipeline asynchrone effectuera automatiquement les opérations d’annulation d’abonnement pour éviter le risque de fuite de mémoire.

Extrait de code source angulaire d'AsyncPipe


@Pipe({name: &#39;async&#39;, pure: false})
export class AsyncPipe implements OnDestroy, PipeTransform {
 // ...
 constructor(private _ref: ChangeDetectorRef) {}

 ngOnDestroy(): void {
  if (this._subscription) {
   this._dispose();
  }
 }
}
Copier après la connexion

@HostListener


export class TestDirective {
 @HostListener(&#39;click&#39;)
 onClick() {
  ....
 }
}
Copier après la connexion

Il est à noter que si vous utilisez le décorateur @HostListener et ajoutez des écouteurs d'événements, nous ne pouvons pas vous désinscrire manuellement. Si vous devez supprimer manuellement la surveillance des événements, vous pouvez utiliser la méthode suivante :


// subscribe
this.handler = this.renderer.listen(&#39;document&#39;, "click", event =>{...});

// unsubscribe
this.handler();
Copier après la connexion

Finite Observable

Lorsque vous utilisez des services HTTP ou des objets observables de minuterie, vous n'avez pas besoin de vous désinscrire manuellement.


export class TestComponent {
 constructor(private http: Http) { }

 ngOnInit() {
  // 表示1s后发出值,然后就结束了
  Observable.timer(1000).subscribe(console.log);
  this.http.get(&#39;http://api.com&#39;).subscribe(console.log);
 }
}
Copier après la connexion

Opérateur de minuterie

Signature de l'opérateur

Copier le code Le code est le suivant :


minuterie statique publique (initialDelay : numéro | Date, période : numéro, planificateur : Planificateur) : Observable

Fonction opérateur

timer renvoie un observable qui émet une séquence infinie d'auto-augmentation avec un certain intervalle de temps. Cet intervalle est choisi par vous.

Exemple d'opérateur


// 每隔1秒发出自增的数字,3秒后开始发送
var numbers = Rx.Observable.timer(3000, 1000);
numbers.subscribe(x => console.log(x));

// 5秒后发出一个数字
var numbers = Rx.Observable.timer(5000);
numbers.subscribe(x => console.log(x));
Copier après la connexion

Recommandation finale

Vous devez appeler pour vous désabonner (le moins possible) méthode, vous pouvez en savoir plus sur le sujet dans l'article RxJS : Ne pas se désabonner.

Des exemples spécifiques sont les suivants :


export class TestComponent {
 constructor(private store: Store) { }

 private componetDestroyed: Subject = new Subject();
 todos: Subscription;
 posts: Subscription;

 ngOnInit() {
   this.todos = this.store.select(&#39;todos&#39;)
           .takeUntil(this.componetDestroyed).subscribe(console.log); 
           
   this.posts = this.store.select(&#39;posts&#39;)
           .takeUntil(this.componetDestroyed).subscribe(console.log); 
 }

 ngOnDestroy() {
  this.componetDestroyed.next();
  this.componetDestroyed.unsubscribe();
 }
}
Copier après la connexion

opérateur takeUntil

Signature de l'opérateur

< Les fonctions de l'opérateur 🎜>

public takeUntil(notifier: Observable): Observable<T>
Copier après la connexion


émettent la valeur émise par la source Observable jusqu'à ce que le notificateur Observable émette une valeur.

Exemple d'opérateur



var interval = Rx.Observable.interval(1000);
var clicks = Rx.Observable.fromEvent(document, &#39;click&#39;);
var result = interval.takeUntil(clicks);

result.subscribe(x => console.log(x));
Copier après la connexion
Recommandations associées :


node.js publier le modèle d'abonnement méthodes

Explication détaillée de l'utilisation du modèle de publication-abonnement JavaScript

Développement de la plateforme publique PHP WeChat Traitement des événements d'abonnement_Tutoriel PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment annuler la superposition de fenêtres et les effets en cascade dans Win11 Comment annuler la superposition de fenêtres et les effets en cascade dans Win11 Jan 10, 2024 pm 02:50 PM

Le chevauchement des fenêtres par défaut dans Win11 est très ennuyeux, donc de nombreux amis veulent annuler les fenêtres qui se chevauchent, mais ne savent pas comment l'annuler. En fait, nous n'avons besoin que d'utiliser un logiciel approprié. Comment annuler les fenêtres qui se chevauchent dans Win11 Méthode 1 : Annuler via la barre des tâches 1. Win11 n'a pas sa propre fonction d'annulation, nous devons donc télécharger un "startallback" 2. Une fois le téléchargement terminé, "décompressez" le package compressé. la décompression est terminée, ouvrez le dossier, exécutez le programme d'installation illustré pour terminer l'installation. . 3. Une fois l'installation terminée, vous devez ouvrir le « Panneau de configuration », puis modifier « Afficher par » dans le coin supérieur droit en « Grandes icônes ». 4. De cette façon, vous pouvez trouver "startallback", cliquez pour l'ouvrir et entrez les "Tâches" sur la gauche

Tutoriel pour annuler le verrouillage de l'écran Win11 Tutoriel pour annuler le verrouillage de l'écran Win11 Dec 31, 2023 pm 12:29 PM

Afin de protéger le contenu de l'écran ou d'économiser de l'énergie, nous activons souvent l'économiseur d'écran, mais trouvons très gênant de ressaisir le verrouillage par mot de passe à chaque fois après avoir quitté l'économiseur d'écran. Alors, comment annuler le verrouillage de l'écran Win11 ? , il peut être désactivé dans les paramètres de l'économiseur d'écran. Comment annuler le verrouillage de l'écran Win11 : 1. Tout d'abord, cliquez avec le bouton droit sur un espace vide du bureau et ouvrez "Personnalisation" 2. Ensuite, recherchez et ouvrez "l'interface de l'écran de verrouillage" à droite 3. Ensuite, ouvrez l'"Économiseur d'écran". " dans les paramètres concernés en bas 4. Enfin, cochez "Afficher l'écran de connexion lors de la restauration" et confirmez pour enregistrer pour annuler le verrouillage de l'écran.

Comment annuler une commande avec Meituan Comment annuler une commande avec Meituan Mar 07, 2024 pm 05:58 PM

Lorsqu'ils passent des commandes avec Meituan, les utilisateurs peuvent choisir d'annuler les commandes qu'ils ne souhaitent pas. De nombreux utilisateurs ne savent pas comment annuler les commandes Meituan. Les utilisateurs peuvent cliquer sur la page Mon pour saisir la commande à recevoir, sélectionner la commande qui doit être reçue. être annulé et cliquez sur Annuler. Comment annuler une commande avec Meituan 1. Tout d'abord, cliquez sur Meituan My Page pour saisir la commande à recevoir. 2. Cliquez ensuite pour saisir la commande qui doit être annulée. 3. Cliquez sur Annuler la commande. 4. Cliquez sur OK pour annuler la commande. 5. Enfin, sélectionnez le motif de l'annulation en fonction de votre situation personnelle et cliquez sur Soumettre.

Étapes détaillées pour annuler le symbole de l'oreille sur WeChat Étapes détaillées pour annuler le symbole de l'oreille sur WeChat Mar 25, 2024 pm 05:01 PM

1. Le symbole de l'oreille est le mode récepteur vocal. Tout d'abord, nous ouvrons WeChat. 2. Cliquez sur moi dans le coin inférieur droit. 3. Cliquez sur Paramètres. 4. Recherchez le chat et cliquez pour entrer. 5. Décochez Utiliser l'écouteur pour écouter la voix.

Où résilier le renouvellement automatique Mango TV ? Où résilier le renouvellement automatique Mango TV ? Feb 28, 2024 pm 10:16 PM

Lorsque de nombreux utilisateurs découvrent Mango TV, un logiciel vidéo, ils choisissent de devenir membres afin de profiter de davantage de ressources cinématographiques et télévisuelles et de services plus complets. Lors de l'utilisation des services d'abonnement Mango TV, certains utilisateurs choisiront d'activer la fonction de renouvellement automatique pour profiter des réductions afin de s'assurer qu'ils ne manqueront aucun contenu passionnant. Cependant, lorsque les utilisateurs n'ont plus besoin des services d'adhésion ou souhaitent changer de mode de paiement, l'annulation de la fonction de renouvellement automatique est une chose très importante pour protéger la sécurité des biens. Comment annuler le service de renouvellement automatique des utilisateurs de Mango TV qui souhaitent savoir ? Venez suivre cet article pour en savoir plus ! Comment annuler le renouvellement automatique de l'abonnement sur Mango TV ? 1. Entrez d'abord [Mon] dans l'application mobile Mango TV, puis sélectionnez [Adhésion VIP]. 2. Recherchez ensuite [Tube

Comment installer Angular sur Ubuntu 24.04 Comment installer Angular sur Ubuntu 24.04 Mar 23, 2024 pm 12:20 PM

Angular.js est une plateforme JavaScript librement accessible pour créer des applications dynamiques. Il vous permet d'exprimer rapidement et clairement divers aspects de votre application en étendant la syntaxe HTML en tant que langage de modèle. Angular.js fournit une gamme d'outils pour vous aider à écrire, mettre à jour et tester votre code. De plus, il offre de nombreuses fonctionnalités telles que le routage et la gestion des formulaires. Ce guide expliquera comment installer Angular sur Ubuntu24. Tout d’abord, vous devez installer Node.js. Node.js est un environnement d'exécution JavaScript basé sur le moteur ChromeV8 qui vous permet d'exécuter du code JavaScript côté serveur. Être à Ub

Comment annuler le renouvellement automatique sur iQiyi Comment annuler le renouvellement automatique sur iQiyi Comment annuler le renouvellement automatique sur iQiyi Comment annuler le renouvellement automatique sur iQiyi Feb 22, 2024 pm 04:46 PM

Vous pouvez ouvrir la fonction de gestion du renouvellement automatique dans l'interface My Gold VIP Member pour annuler. Didacticiel Modèle applicable : Huawei P50 Système : HarmonyOS2.0 Version : Analyse iQiyi 12.1.0 1 Ouvrez l'application iQiyi sur votre téléphone, puis accédez à la page Ma. 2 Cliquez ensuite sur le membre VIP Gold en haut de ma page, puis cliquez sur l'option Gérer le renouvellement automatique. 3. Cliquez sur Annuler le renouvellement automatique dans la fenêtre contextuelle. Si vous n'êtes pas intéressé, continuez à annuler. 4Enfin, confirmez pour désactiver le renouvellement automatique et cliquez sur Je comprends, il suffit de le rejeter cruellement. Supplément : Comment annuler la fonction de renouvellement automatique d'iQiyi sur un téléphone mobile Apple 1. Ouvrez les paramètres du téléphone, puis cliquez sur [AppleID] en haut de l'interface des paramètres. 2Cliquez sur [S'abonner] sur l'interface AppleID pour sélectionner

Étapes opérationnelles pour annuler le paiement d'un abonnement sur WeChat Étapes opérationnelles pour annuler le paiement d'un abonnement sur WeChat Mar 26, 2024 pm 08:21 PM

1. Cliquez sur l'option [iTunesStore et AppStore] dans les paramètres du téléphone. 2. Cliquez sur [Afficher AppleID], puis saisissez le mot de passe de connexion. 3. Accédez à l'interface [Paramètres du compte] et cliquez sur [Informations de paiement]. 4. Vérifiez le mode de paiement comme [Aucun] et cliquez sur [Terminer]. Une fois terminé, revenez à l'interface WeChat. À ce moment, vous recevrez le message [Notification de résiliation réussie] et WeChat ne déduira plus automatiquement les frais.

See all articles