Skip to content

Output | Angular 新手練功日誌

· 3 min

今天要介紹在 Angular 中,如何使用 output 函式以及 @Output 裝飾器來實現元件之間的事件傳遞。

在巢狀元件使用情況下,通常會使用提升的方式,將資料拉到父元件中統一管理,而子物件想要通知父元件某些事件發生的話,就會用到 Output,來將事件從子元件傳遞到父元件,例如:點擊子元件的按鈕後,在父元件觸發新增待辦事項的事件。

目前有兩種語法來實現元件之間的事件傳遞:

output#

output用於定義在元件輸出事件。

@Component({
selector: 'app-child',
template: `<button (click)="handleClick()">點擊按鈕</button>`
})
export class ChildComponent {
clicked = output<string>();
handleClick() {
this.clicked.emit('按鈕被點擊了!');
}
}

在父元件中會使用子元件定義的事件,來觸發對應的事件處理函式。

@Component({
selector: 'app-parent',
template: `<app-child (clicked)="onChildClicked($event)"></app-child>` // clicked 是子元件定義的事件
})
export class ParentComponent {
onChildClicked(message: string) {
  console.log('從子元件接收到的訊息:', message);
}
}

@Output#

使用 @Output 裝飾器,來定義輸出事件。

import { Component, Output, EventEmitter } from '@angular/core';
@Component({
selector: 'app-child',
template: `<button (click)="handleClick()">點擊按鈕</button>`
})
export class ChildComponent {
@Output() clicked = new EventEmitter<string>();
handleClick() {
this.clicked.emit('按鈕被點擊了!');
}
}

在父元件中使用子元件定義的事件,和 output 的用法相同。

@Component({
selector: 'app-parent',
template: `<app-child (clicked)="onChildClicked($event)"></app-child>`
})
export class ParentComponent {
onChildClicked(message: string) {
  console.log('從子元件接收到的訊息:', message);
}
}

專案製作#

今日目標:點擊按鈕可以新增待辦事項。

結論#

今天介紹了兩種在 Angular 中實現元件之間事件傳遞的方法:output 函式和 @Output 裝飾器。明天介紹如何在 Angular 中實現雙向綁定。