32 votes

Angular - DialogRef - Unsubscribe - Dois-je me désinscrire de afterClosed ?

Un de mes collègues m'a demandé s'il fallait se désinscrire de l'observable afterClosed() d'un Dialog.

Nous utilisons le modèle takeUntil pour nous désinscrire de tous les Observables sur ngOnDestroy().

this.backEvent = fromEvent(window, 'popstate')
    .pipe(
        takeUntil(this.destroy$)
    )
    .subscribe(
        () => {
            this.navigationService.backClicked = true;
            this.navigationService.navigateBackToDirectoryCenter();
        }
    );

ngOnDestroy()

ngOnDestroy() {
    this.destroy$.next();
    this.destroy$.complete();
}

Est-il donc nécessaire de se désinscrire de l'Observable afterClosed() ?

dialogRef.afterClosed().subscribe(
    (data) => {
            console.log(data);
        }
    },
);

ou ?

dialogRef.afterClosed()
    .pipe(
        takeUntil(this.destroy$)
    )
    .subscribe(
        (data) => {
            console.log(data);
        },
    );

59voto

Archit Garg Points 58

Non

Vous n'avez pas besoin de vous désinscrire car l'observable se termine lui-même. Vous pouvez vérifier la même chose en ajoutant un bloc finalize pour voir si l'observable se termine lui-même ou non.

import { finalize } from "rxjs/operators";

dialogRef
  .afterClosed()
  .pipe(finalize(() => console.log("completed")))
  .subscribe(data => {
    console.log(data);
  });

Lorsque vous fermerez la boîte de dialogue, vous verrez completed dans la console, cela montre que il n'est pas nécessaire de désinscrire l'observable.

4voto

CacheMoneyPlaya Points 122

Bonne question, je viens de jeter un coup d'œil à la documentation ( https://material.angular.io/components/dialog/overview ), rien ne semble indiquer la nécessité de se désinscrire, ce que vous avez déjà devrait suffire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X