Angular の @Output デコレーターは、子コンポーネントから親コンポーネントへイベント通知を行う際に利用します。

子コンポーネントとして、MyLabel コンポーネントがある例で考えてみます。
MyLabel コンポーネントでは、clicked という EventEmitter オブジェクトを準備し、@Output デコレーターで付与しておきます。パラグラフタグがクリックされたタイミングで、clicked.emit() メソッドを呼び出します。
emit() メソッドを呼び出すと、親コンポーネントにイベントを通知することができます。emit() メソッドの引数に任意のオブジェクトを渡すと、親コンポーネントにイベント通知とともにデータを渡すことができます。次の例では、イベント通知とともに 'paragraph clicked!' という文字列を親コンポーネントに渡しています。
MyLabel コンポーネント
<p (click)="onParagraphClick()"> my-label works! </p>
import {
Component,
Output,
EventEmitter
} from '@angular/core';
@Component({
selector: 'app-my-label',
templateUrl: './my-label.component.html',
styleUrls: ['./my-label.component.css']
})
export class MyLabelComponent {
@Output() clicked = new EventEmitter();
constructor() { }
onParagraphClick() {
this.clicked.emit('paragraph clicked!');
}
}
イベントを受け取る親コンポーネント側では、MyLabel コンポーネントの clicked イベントを購読します。
AppComponent
<app-my-label (clicked)="onClicked($event)"></app-my-label>
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
name = 'Angular';
onClicked(args) {
console.log(args);
}
}
実行結果
