web-dev-qa-db-ja.com

Angular2 ngOnDestroy、emitイベント

ngOnDestroyでカスタムイベントを発行することは可能ですか?試してみましたが、うまくいかないようです...基本的には、UIからディレクティブが削除されたことを知る必要があります。

@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);
}
10
jona jürgen

コンポーネント自体の内部ではなく、サービスで定義された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 => { ... });

それがあなたを助けることを願っています、ティエリー

16