angular4 组件间通讯
1.父→子 input
parent.ts
import { Component } from '@angular/core';
@Component({
selector: 'page-parent',
templateUrl: 'parent.html',
})
export class ParentPage {
i: number = 0;
constructor() {
setInterval(() => {
this.i++;
}, 1000)
}
}
parent.html
<ion-header> <ion-navbar> <ion-title>Parent</ion-title> </ion-navbar> </ion-header> <ion-content padding> <h2>Parent</h2> <!--page-child为子组件标签,content指令是child.ts中用@Input定义的--> <page-child [content]="i"></page-child> </ion-content>
child.ts
import { Component,Input } from '@angular/core';
@Component({
selector: 'page-child',
templateUrl: 'child.html',
})
export class ChildPage {
@Input()
content:string;
constructor() {}
child.html
<div>child:{{content}}</div>
2.子→父 output
angular提供了EventEmitter类来用于接收和发射数据,这里我们使用EventEmitter的emit方法来向父组件发射数据。
child.ts
import { Component, EventEmitter, Output } from '@angular/core';
@Component({
selector: 'page-child',
templateUrl: 'child.html',
})
export class ChildPage {
//定义输出属性,EventEmitter用来将属性发射出去,这里的泛型指定
//了要发射出去的的数据类型
@Output()
changeNumber: EventEmitter<number> = new EventEmitter();
Number: number = 0;
constructor() {
setInterval(() => {
this.changeNumber.emit(++this.Number);
}, 1000)
}
}
child.html
<div>child</div>
parent.ts
import { Component } from '@angular/core';
@Component({
selector: 'page-parent',
templateUrl: 'parent.html',
})
export class ParentPage {
i: number = 0;
numberIChange(event:number){
this.i = event;
}
}
parent.html
<ion-header> <ion-navbar> <ion-title>Parent</ion-title> </ion-navbar> </ion-header> <ion-content padding> <h2>Parent:{{i}}</h2> <!--这里将子组件的changeNumber属性与父组件的事件绑定,$event其实就是子组件发射出来的值number--> <page-child (changeNumber)="numberIChange($event)"></page-child> </ion-content>
3.父、子间双向绑定
使用[()]来进行父组件和子组件的双向数据绑定时,Output属性的名称 = Input属性+Change,如下
child.ts
@Input() private rating:number=0;//当前星级,接收父组件productDetail传来的值 @Output() private ratingChange:EventEmitter<number> = new EventEmitter();//星级变化,将当前的星级输出到父组件 click(){ this.ratingChange.emit(this.rating);//发射当前rating值出去,在父组件接收 }
parent.ts
newRating:number = 5;
parent.html
<app-stars [(rating)]="newRating"></app-stars>

浙公网安备 33010602011771号