上層將資料傳到下層
上層帶資料,下層使用@Input()讓上層使用:
- 父元件資料 @parent.component.ts
1 2 3
| export class Parent { dataElements = [{name: 'Test', content: 'from parent'}]; }
|
- 父元件標註 @parent.component.html
抓取dataElements資料,到child element,使用「cElement」的格式
1 2 3 4
| <app-child-element *ngFor="let dataElement of dataElements" [cElement]="dataElement"> </app-child-element>
|
- 子元件設定cElement @child.component.ts
使用@Input()讓上層可以使用下層的物件,括號內(“”)可以寫在上層會怎麼被呼叫。
這裡element所定義的物件,在同層的html檔案中使用
1 2 3 4 5 6 7 8
| export class Child implements OnInit { @Input('cElement') element: {name: string, content: string};
constructor() { }
ngOnInit(): void { } }
|
- 子元件設定 @child.component.html
1 2
| <h1>{{ element.name }}</h1> <p>{{ element.content }}</p>
|
上層監聽下層事件,下層資料傳到上層
下層使用EventEmitter屬性,當事件發生時,利用emit將事件傳到上層,上層做出回應。
- 子元件設定觸發事件 @child.component.html
按鈕點擊觸發onAddElement()
1
| <button (click)="onAddElement()></button>
|
- 使用EventEmitter屬性,並設定emit事件 @child.component.ts
1 2 3 4 5 6 7
| import { Component, OnInit, EventEmitter, Output } from '@angular/core';
export class ChildComponent implements OnInit { @Output() elementCreated = new EventEmitter<eName: string, eContent: string>(); newEName = ''; newEContent = ''; }
|