Maison interface Web js tutoriel Explication détaillée du moment où annuler l'abonnement dans Angular

Explication détaillée du moment où annuler l'abonnement dans Angular

Dec 12, 2017 am 11:05 AM
angular 取消 订阅

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. Cet article présente principalement une brève discussion sur le moment où annuler un abonnement dans Angular. L'éditeur pense que c'est plutôt bien. Maintenant, je vais le partager avec vous et vous donner une référence. Suivons l'éditeur et jetons un œil. J'espère que cela pourra aider tout le monde.

Scénario de ressources de publication manuelle

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


La solution ci-dessus est également applicable à d'autres contrôles de formulaire.

Itinéraire


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


Boutique Redux


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 les scénarios de ressources

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 l'opération de désabonnement, évitant ainsi les risques de fuites 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, nous ne pouvons pas vous désinscrire manuellement lors de l'ajout d'écouteurs d'événements. 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 timer, 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. toi. .

Exemples d'opérateurs


// 每隔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


Conseil final

Vous devrait appeler la méthode unsubscribe() le moins possible. Vous pouvez en savoir plus sur le sujet dans l'article RxJS : Ne pas vous 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


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


Effet opérateur

Émet la valeur émise par la source Observable jusqu'à ce que le notifier Observable émet des valeurs.

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 :

Explication détaillée de la validation du formulaire dans AngularJS

Explication détaillée de l'utilisation des instructions personnalisées dans AngularJS_AngularJS

Explication détaillée du filtrage personnalisé dans AngularJS Device_AngularJS

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.

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

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.

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.

É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 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

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 supprimer le mot de passe de l'écran de verrouillage de Windows 10 maintenant Comment supprimer le mot de passe de l'écran de verrouillage de Windows 10 maintenant Jan 09, 2024 pm 03:33 PM

Après la mise à niveau du système win101909, certains amis voudront peut-être annuler le mot de passe de l'écran de verrouillage de leur ordinateur. Si vous ne savez pas quoi faire, je pense que nous pouvons trouver les options de compte dans la fenêtre des paramètres de l'ordinateur. Jetons un coup d'œil aux méthodes spécifiques. Comment annuler le mot de passe de l'écran de verrouillage dans win101909 : 1. Appuyez d'abord sur Win+I pour ouvrir l'interface des paramètres. 2. Recherchez ensuite l'option de connexion au compte, puis définissez-la comme indiqué sur la figure. Comment annuler la connexion par mot de passe à la mise sous tension dans win101909 : 1. Exécutez regedit pendant l'exécution pour ouvrir le registre et accédez au chemin suivant : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\Cu

See all articles