Heim Web-Frontend js-Tutorial Eine kurze Diskussion zum Abbestellen in Angular

Eine kurze Diskussion zum Abbestellen in Angular

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

Dieser Artikel führt hauptsächlich eine kurze Diskussion darüber ein, wann ein Abonnement in Angular gekündigt werden sollte. Der Herausgeber findet ihn recht gut, daher werde ich ihn jetzt mit Ihnen teilen und als Referenz geben. Folgen wir dem Herausgeber und schauen wir uns das an. Ich hoffe, es kann allen helfen.

Sie wissen vielleicht, dass Sie, wenn Sie ein Observable-Objekt abonnieren oder einen Ereignis-Listener einrichten, irgendwann einen Abmeldevorgang durchführen müssen, um den Speicher des Betriebssystems freizugeben. Andernfalls kann es bei Ihrer Anwendung zu Speicherverlusten kommen.

Als nächstes werfen wir einen Blick auf einige häufige Szenarien, in denen Abmeldevorgänge manuell im ngOnDestroy-Lebenszyklus-Hook durchgeführt werden müssen.

Szenario für die manuelle Freigabe von Ressourcen

Formular


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();
 }
}
Nach dem Login kopieren

Das Obige Die Lösung funktioniert auch. Gilt für andere Formularsteuerelemente.

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() {
  // 手动执行取消订阅的操作
 }
}
Nach dem Login kopieren

Renderer-Service


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();
 }
}
Nach dem Login kopieren

Unendliche Observablen

Wenn Sie den Operator „interval()“ oder „fromEvent()“ verwenden, erstellen Sie ein unendliches Observable-Objekt. In diesem Fall müssen wir die Ressourcen manuell abbestellen und freigeben, wenn wir sie nicht mehr benötigen.


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();
 }
}
Nach dem Login kopieren

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();
 }
}
Nach dem Login kopieren

Ressourcen müssen nicht manuell freigegeben werden Szenarien

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;);
 }
}
Nach dem Login kopieren

Wenn die Komponente zerstört wird, wird die asynchrone Pipeline zerstört führt automatisch Abo-Kündigungsvorgänge durch, um das Risiko von Speicherverlusten zu vermeiden.

Angular AsyncPipe-Quellcode-Snippet


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

 ngOnDestroy(): void {
  if (this._subscription) {
   this._dispose();
  }
 }
}
Nach dem Login kopieren

@HostListener


export class TestDirective {
 @HostListener(&#39;click&#39;)
 onClick() {
  ....
 }
}
Nach dem Login kopieren

Es ist zu beachten, dass wir uns nicht manuell abmelden können, wenn Sie den @HostListener-Dekorator verwenden und Ereignis-Listener hinzufügen. Wenn Sie die Ereignisüberwachung manuell entfernen müssen, können Sie die folgende Methode verwenden:


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

// unsubscribe
this.handler();
Nach dem Login kopieren

Finite Observable

Wenn Sie HTTP-Dienste oder beobachtbare Timer-Objekte verwenden, müssen Sie sich nicht manuell abmelden.


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);
 }
}
Nach dem Login kopieren

Timer-Operator

Operatorsignatur

Code kopieren Der Code lautet wie folgt :


öffentlicher statischer Timer (initialDelay: Nummer | Datum, Zeitraum: Nummer, Scheduler: Scheduler): Beobachtbar

Operatorfunktion

Der Timer gibt ein Observable zurück, das eine unendliche, automatisch ansteigende Sequenz mit einem bestimmten Zeitintervall ausgibt. Dieses Intervall wird von Ihnen gewählt.

Operator-Beispiel


// 每隔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));
Nach dem Login kopieren

Abschließende Empfehlung

Sie sollten uns abmelden (so wenig wie möglich) -Methode erfahren Sie mehr über Subject im Artikel RxJS: Don't Unsubscribe.

Spezifische Beispiele sind wie folgt:


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();
 }
}
Nach dem Login kopieren

takeUntil-Operator

Operatorsignatur

< Die 🎜>

public takeUntil(notifier: Observable): Observable<T>
Nach dem Login kopieren
-Operatorfunktion


gibt den vom Quell-Observable ausgegebenen Wert aus, bis das Notifier-Observable einen Wert ausgibt.

Operator-Beispiel



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));
Nach dem Login kopieren
Verwandte Empfehlungen:


node.js veröffentlichen und abonnieren Muster Methoden

Detaillierte Erläuterung der Verwendung des JavaScript-Publish-Subscribe-Modus

PHP WeChat öffentliche Plattformentwicklung Abonnementereignisverarbeitung_PHP-Tutorial

Das obige ist der detaillierte Inhalt vonEine kurze Diskussion zum Abbestellen in Angular. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So deaktivieren Sie Fensterüberlagerungen und kaskadierende Effekte in Win11 So deaktivieren Sie Fensterüberlagerungen und kaskadierende Effekte in Win11 Jan 10, 2024 pm 02:50 PM

Die Standardfensterüberlappung in Win11 ist sehr ärgerlich, daher möchten viele Freunde die überlappenden Fenster abbrechen, wissen aber nicht, wie man sie abbricht. Tatsächlich müssen wir nur entsprechende Software verwenden. So brechen Sie überlappende Fenster in Win11 ab Methode 1: Abbrechen über die Taskleiste 1. Win11 verfügt nicht über eine eigene Abbruchfunktion, daher müssen wir ein „Startallback“ herunterladen. 2. Nachdem der Download abgeschlossen ist, „entpacken“ Sie das komprimierte Paket Die Dekomprimierung ist abgeschlossen. Öffnen Sie den Ordner und führen Sie das abgebildete Installationsprogramm aus, um die Installation abzuschließen. . 3. Nachdem die Installation abgeschlossen ist, müssen Sie die „Systemsteuerung“ öffnen und dann die „Ansicht nach“ in der oberen rechten Ecke auf „Große Symbole“ ändern. 4. Auf diese Weise können Sie „startallback“ finden, klicken, um es zu öffnen, und links die „Aufgaben“ eingeben

Anleitung zum Aufheben der Win11-Bildschirmsperre Anleitung zum Aufheben der Win11-Bildschirmsperre Dec 31, 2023 pm 12:29 PM

Um den Bildschirminhalt zu schützen oder Strom zu sparen, schalten wir oft den Bildschirmschoner ein, finden es jedoch sehr mühsam, die Passwortsperre jedes Mal erneut einzugeben, nachdem wir den Bildschirmschoner verlassen haben , kann in den Bildschirmschonereinstellungen deaktiviert werden. So heben Sie die Win11-Bildschirmsperre auf: 1. Zuerst klicken wir mit der rechten Maustaste auf eine leere Stelle auf dem Desktop und öffnen „Personalisierung“. 2. Suchen und öffnen Sie dann rechts die „Sperrbildschirmschnittstelle“. 3. Öffnen Sie dann den „Bildschirmschoner“. " in den entsprechenden Einstellungen unten 4. Aktivieren Sie abschließend „Anmeldebildschirm bei Wiederherstellung anzeigen“ und bestätigen Sie zum Speichern, um die Bildschirmsperre aufzuheben.

So stornieren Sie eine Bestellung bei Meituan So stornieren Sie eine Bestellung bei Meituan Mar 07, 2024 pm 05:58 PM

Wenn Benutzer Bestellungen über Meituan aufgeben, können sie nicht gewünschte Bestellungen stornieren. Viele Benutzer wissen nicht, wie sie Meituan-Bestellungen stornieren können. Benutzer können auf die Seite „Mein“ klicken, um die Bestellung einzugeben, die sie erhalten möchten storniert werden und klicken Sie auf „Abbrechen“. So stornieren Sie eine Bestellung bei Meituan 1. Klicken Sie zunächst auf Meituan Meine Seite, um die Bestellung einzugeben, die Sie erhalten möchten. 2. Klicken Sie dann auf , um die Bestellung einzugeben, die storniert werden soll. 3. Klicken Sie auf Bestellung stornieren. 4. Klicken Sie auf OK, um die Bestellung zu stornieren. 5. Wählen Sie abschließend den Kündigungsgrund entsprechend Ihrer persönlichen Situation aus und klicken Sie auf Absenden.

Detaillierte Schritte zum Deaktivieren des Ohrsymbols auf WeChat Detaillierte Schritte zum Deaktivieren des Ohrsymbols auf WeChat Mar 25, 2024 pm 05:01 PM

1. Das Ohrsymbol ist der Sprachempfängermodus. Zuerst öffnen wir WeChat. 2. Klicken Sie unten rechts auf mich. 3. Klicken Sie auf Einstellungen. 4. Suchen Sie den Chat und klicken Sie, um ihn zu betreten. 5. Deaktivieren Sie die Option „Ohrhörer zum Abspielen der Stimme verwenden“.

Wo kann ich die automatische Verlängerung von Mango TV kündigen? Wo kann ich die automatische Verlängerung von Mango TV kündigen? Feb 28, 2024 pm 10:16 PM

Wenn viele Benutzer Mango TV, eine Videosoftware, kennenlernen, entscheiden sie sich für eine Mitgliedschaft, um mehr Film- und Fernsehressourcen und umfassendere Dienste zu genießen. Bei der Nutzung der Mango TV-Mitgliedschaftsdienste entscheiden sich einige Benutzer dafür, die automatische Verlängerungsfunktion zu aktivieren, um von den Rabatten zu profitieren und sicherzustellen, dass ihnen keine spannenden Inhalte entgehen. Wenn Benutzer jedoch keine Mitgliedschaftsdienste mehr benötigen oder die Zahlungsmethode ändern möchten, ist die Kündigung der automatischen Verlängerungsfunktion eine sehr wichtige Sache, um die Sicherheit ihres Eigentums zu schützen. Wie können Benutzer den automatischen Verlängerungsdienst kündigen? Kommen Sie und folgen Sie diesem Artikel, um mehr zu erfahren! Wie kann ich die automatische Verlängerung der Mitgliedschaft bei Mango TV kündigen? 1. Geben Sie zunächst „Mein“ in der mobilen Mango TV-App ein und wählen Sie dann „VIP-Mitgliedschaft“ aus. 2. Suchen Sie dann nach [Tube

So kündigen Sie die automatische Verlängerung bei iQiyi. So kündigen Sie die automatische Verlängerung bei iQiyi So kündigen Sie die automatische Verlängerung bei iQiyi. So kündigen Sie die automatische Verlängerung bei iQiyi Feb 22, 2024 pm 04:46 PM

Sie können die Funktion zur automatischen Verlängerung der Verwaltung in der My Gold VIP-Mitgliederoberfläche öffnen, um zu kündigen. Tutorial Anwendbares Modell: Huawei P50 System: HarmonyOS2.0 Version: iQiyi 12.1.0 Analyse 1 Öffnen Sie die iQiyi-App auf Ihrem Telefon und rufen Sie dann die Seite „Mein“ auf. 2 Klicken Sie dann oben auf meiner Seite auf „Gold VIP-Mitglied“ und dann auf die Option „Automatische Verlängerung verwalten“. 3. Klicken Sie im Popup-Fenster auf Automatische Verlängerung abbrechen. Wenn Sie kein Interesse haben, fahren Sie mit dem Abbrechen fort. 4Bestätigen Sie abschließend die Deaktivierung der automatischen Verlängerung und klicken Sie auf „Ich verstehe, lehne es einfach grausam ab“. Ergänzung: So deaktivieren Sie die automatische Verlängerungsfunktion auf dem iQiyi iPhone 1. Öffnen Sie die Einstellungen auf dem Telefon und klicken Sie dann oben in der Einstellungsoberfläche auf [AppleID]. 2Klicken Sie zur Auswahl auf der AppleID-Oberfläche auf [Abonnieren].

So installieren Sie Angular unter Ubuntu 24.04 So installieren Sie Angular unter Ubuntu 24.04 Mar 23, 2024 pm 12:20 PM

Angular.js ist eine frei zugängliche JavaScript-Plattform zum Erstellen dynamischer Anwendungen. Es ermöglicht Ihnen, verschiedene Aspekte Ihrer Anwendung schnell und klar auszudrücken, indem Sie die Syntax von HTML als Vorlagensprache erweitern. Angular.js bietet eine Reihe von Tools, die Sie beim Schreiben, Aktualisieren und Testen Ihres Codes unterstützen. Darüber hinaus bietet es viele Funktionen wie Routing und Formularverwaltung. In dieser Anleitung wird erläutert, wie Angular auf Ubuntu24 installiert wird. Zuerst müssen Sie Node.js installieren. Node.js ist eine JavaScript-Ausführungsumgebung, die auf der ChromeV8-Engine basiert und es Ihnen ermöglicht, JavaScript-Code auf der Serverseite auszuführen. In Ub sein

Vorgehensweise zum Stornieren der Abonnementzahlung bei WeChat Vorgehensweise zum Stornieren der Abonnementzahlung bei WeChat Mar 26, 2024 pm 08:21 PM

1. Klicken Sie in den Telefoneinstellungen auf die Option [iTunesStore und AppStore]. 2. Klicken Sie auf [AppleID anzeigen] und geben Sie dann das Anmeldekennwort ein. 3. Rufen Sie die Benutzeroberfläche [Kontoeinstellungen] auf und klicken Sie auf [Zahlungsinformationen]. 4. Markieren Sie die Zahlungsmethode als [Keine] und klicken Sie auf [Fertig stellen]. Kehren Sie nach Abschluss zur WeChat-Oberfläche zurück. Zu diesem Zeitpunkt erhalten Sie die Meldung [Benachrichtigung über erfolgreiche Stornierung] und WeChat zieht die Gebühren nicht mehr automatisch ab.

See all articles