Angular中的輸入輸出是經過註解@Input
和@Output
來標識,它位於組件控制器的屬性上方。
輸入輸出針對的對象是父子組件。html
connInComponents
:ng new connInComponents
.stock
:ng g component stock
.stock.component.ts
中新增屬性stockName
並將其標記爲輸入@Input()
:@Input() protected stockName: string;
@Input()
則應有對應的父組件,此處使用默認生成的主組件app
.keyWork
並經過視圖文件app.component.html
中的標籤<input>
來進行雙向綁定,最後,在視圖文件app.component.html
中嵌入子組件並進行賦值://ts protected keyWord: string; //html <input placeholder="請輸入股票名稱" [(ngModel)]="keyWord"> <app-stock [stockName]="keyWord"></app-stock>
注意,[(ngModel)]
須要在app.module.ts
中引入模塊FormsModule
。
這樣就完成了父組件向子組件賦值的操做了。app
<p> stock works! </p> <div> 股票名稱:{{stockName}} </div>
Output
的賦值操做不像Input
那樣簡單,它須要經過位於@angular/core
包下的EventEmitter
對象來監聽並處理數據。而且須要傳入泛型類來規定參數類型。dom
在父子組件中各自定義一個表示股票價格的屬性,並經過Output
將子組件中的價格信息傳給父組件。this
EventEmitter
須要傳入泛型類,所以咱們首先定義一個股票信息類:export class StockInfo { constructor(public name: string, public price: number) { this.name = name; this.price = price; } }
stock.component.ts
中新增屬性stockPrice
和event
,並在初始化方法中爲stockPrice
賦值並經過event
將當前綁定對象發射出去:protected stockPrice: number; @Output() protected event: EventEmitter<StockInfo> = new EventEmitter(); ngOnInit() { setInterval(() => { const stock: StockInfo = new StockInfo(this.stockName, 100 * Math.random()); this.stockPrice = stock.price; this.event.emit(stock); }, 3000); }
此時子組件的發射動做已完成,那麼如何接收發射的數據呢?雙向綁定
currentPrice
和接收方法eventHandler
:protected currentPrice: number; eventHandler(stock: StockInfo) { this.currentPrice = stock.price; }
<app-stock>
上添加綁定關係:<app-stock [stockName]="keyWord" (event)="eventHandler($event)"></app-stock>
其中event
對應子組件屬性,eventHandler
對應父組件接收並處理子組件傳來的方法,$event
表明泛型類參數,此處是一個類型爲StockInfo
的實例。code
此時賦值操做已經完成,在父子組件的視圖文件中添加顯示接收到的信息(股票價格)便可:
stock.component.htmlcomponent
<div> 股票名稱:{{stockName}}<br>當前價格:{{stockPrice | number:'2.1-2'}} </div>
app.component.htmlorm
<div> 股票名稱:{{keyWord}}<br>當前價格:{{currentPrice | number:'2.1-2'}} </div>
@Output
能夠傳遞參數,其值與嵌入的子組件視圖元素<app-stock>
上綁定的數據名稱統一。
如@Output('lastPrice')
,那麼htm
<app-stock [stockName]="keyWord" (event)="eventHandler($event)"></app-stock>
相應改成:對象
<app-stock [stockName]="keyWord" (lastPrice)="eventHandler($event)"></app-stock>