Angular2 ngOnDestroy, генерировать событие

Можно ли создать пользовательское событие на ngOnDestroy? Я пытался, но похоже, что это не работает... Мне в основном нужно знать, когда директива удаляется из пользовательского интерфейса.

@Output() rowInit = new EventEmitter();
@Output() rowDestroy = new EventEmitter();

ngAfterViewInit() {

    this.rowInit.emit(this);
}

ngOnDestroy() {
    console.log("I get called, but not emit :(, ngAfterViewInit works :)");
    this.rowDestroy.emit(this);
}

person jona jürgen    schedule 12.01.2016    source источник


Ответы (1)


Я думаю, что вы могли бы использовать EventEmitter, определенный в сервисе, а не в самом компоненте. Таким образом, ваш компонент будет использовать этот атрибут службы для генерации события.

import {EventEmitter} from 'angular2/core';

export class NotificationService {
  onDestroyEvent: EventEmitter<string> = new EventEmitter();
  constructor() {}
}

export class MyComponent implements OnDestroy {
  constructor(service:NotificationService) {
    this.service = service;
  }

  ngOnDestroy() {
    this.service.onDestroyEvent.emit('component destroyed');
  }
}

Другие элементы/компоненты могут подписаться на этот EventEmitter, чтобы получать уведомления:

this.service.onDestroyEvent.subscribe(data => { ... });

Надеюсь, это поможет вам, Тьерри.

person Thierry Templier    schedule 12.01.2016
comment
Большое спасибо, Тьерри! У меня есть к вам еще один вопрос: я создал службу с несколькими эмиттерами событий, такими как: tableViewOnInitEvent = new EventEmitter(); и т. д. Можно ли настроить эти эмиттеры только на подписку/только чтение? Я не хочу вызывать эмиттеры напрямую через службу, но я хочу вызывать эмиттер из функции внутри службы, например: (внутри службы): public tableViewOnInit(tableView) { this.tableViewOnInitEvent.next({ tableView: tableView }); } Спасибо :) - person jona jürgen; 13.01.2016
comment
Сервис - хорошее решение. Если вам нужно специальное решение, вы можете вручную подписаться (и отказаться от подписки). См. stackoverflow.com/questions/37609758/ для более подробного объяснения - person Shlomi Assaf; 07.07.2016
comment
Служба уведомлений — это глобальная шина, вам по-прежнему нужен способ фильтрации только тех элементов, которые вам нужны, переключившись на этот подход, где EventEmitter может содержать свои события в иерархии. - person Juan Mendes; 07.10.2016