DevGang
Авторизоваться

Использование NgOnDestroy с сервисами в Angular

Когда компонент Angular уничтожается, вызывается метод жизненного цикла ngOnDestroy, чтобы мы могли очистить долгосрочные задачи или отписаться от любых RxJS Observables. В Angular Services также есть метод ngOnDestroy, аналогичный Angular-компонентам. Это может быть полезно, когда мы создаем и уничтожаем сервисы, которые должны выполнять некоторую очистку после уничтожения.

Некоторые службы могут иметь глобальные слушатели событий или длительные задачи, которые, если они больше не используются, должны быть очищены. Angular Services обычно по умолчанию являются синглетонами, но могут быть зарегистрированы для создания экземпляра для каждого компонента.

import { Component } from '@angular/core';
import { LogService } from './log.service';

@Component({
  selector: 'app-hello',
  template: `hello there`,
  providers: [LogService]
})
export class HelloComponent {
 constructor(private log: LogService) { }
}

В нашем примере у нас есть компонент, который использует LogService. LogService зарегистрирован для поставщиков компонентов, а не для корневого поставщика или NgModule. Это позволяет создавать и уничтожать сервис для каждого экземпляра нашего компонента.

У LogService будет смоделированная задача, которая будет каждую секунду регистрироваться в консоли.

import { Injectable } from '@angular/core';

@Injectable()
export class LogService {
  count = 0;

  constructor() {
    console.log('constructor: logging starting...');
    setInterval(() => {
      console.log(this.count++);
    }, 1000);
  }
}

Когда служба будет создана, будет создан constructor и интервал, который будет регистрироваться каждую секунду.




В нашем примере мы переключаем наш компонент нажатием кнопки. Когда компонент отображается, компонент создается, а также экземпляр LogService. Когда компонент удаляется и LogService.

import { Injectable } from '@angular/core';

@Injectable()
export class LogService {
  interval: any;
  count = 0;

  constructor() {
    console.log('constructor: logging starting...');
    this.interval = setInterval(() => {
      console.log(this.count++);
    }, 1000);
  }

  ngOnDestroy() {
    console.log('ngOnDestroy: cleaning up...');
    clearInterval(this.interval);
  }
}

Когда наш сервис уничтожается, метод ngOnDestroy вызывается в нашем сервисе. Когда метод вызывается, мы можем очистить любые долгосрочные задачи, такие как наш интервал выполнения. Использование ngOnDestroy может быть полезным для обеспечения очистки задач в нашем приложении. Ознакомьтесь с полным рабочим демо ниже.

Источник:

#Angular
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

Поделитесь своим опытом, расскажите о новом инструменте, библиотеке или фреймворке. Для этого не обязательно становится постоянным автором.

Попробовать

В этом месте могла бы быть ваша реклама

Разместить рекламу