6.1组件间通讯
输入属性(父组件 → 子组件)
使用@Input注解可以声明一个输入属性。声明输入属性可以理解为自定义属性
@Input()
stockCode:string;
实战
假设存在两组件,分别为父组件app和子组件app-order,在父组件app的模板中使用了子组件app-order,若父组件希望读取input中的输入值,将其传递给子组件并显示,应如何编码?
定义一个具有stockCode输入属性的order子组件,
在app组件中使用order组件,
并将app组件中一个input标签的值传给stockCode输入属性。
子组件
order组件模板代码:
<p>order子组件:{{stockCode}}</p>
order组件控制器代码:
@Input()
stockCode: string;
父组件
app组件模板代码:
<input (input)="onInput($event)">
<app-order [stockCode]="stock"></app-order>
app组件控制器代码:
stock: string;
constructor() {
}
onInput(event: any) {
this.stock = event.target.value;
}
处理通过输入属性传递数据,还可以通过路由参数传递数据 使用路由参数传递数据需要注入:routeInfo: ActivatedRoute
输出属性(子组件 → 父组件)
声明一个输出属性可以理解为自定义事件。
定义输出属性
@Output('priceChange') priceChange: EventEmitter<number> = new EventEmitter(); @Output('自定义事件名称') 自定义事件名: EventEmitter<自定义事件的返回类型> = new EventEmitter();
当@Output()括号内为空时,默认“自定义事件名称”为“自定义事件名”
发射自定义事件
this.priceChange.emit(num); this.自定义事件名.emit(发射实际值);
父组件中使用自定义事件接受返回值
<app-price-quote (priceChange)="onPriceChange($event)"></app-price-quote> <app-price-quote (priceChange)="事件处理函数(自定义事件返回值)"></app-price-quote>
实战:新建一个具有priceChange输出属性的price-quote组件。priceChange事件中包含实时变化的数字。app组件需要获取到这个数字并显示
price-quote组件控制器代码
@Output('priceChange')
priceChange: EventEmitter<number> = new EventEmitter();
constructor() {
setInterval(() => {
const num: number = Math.random();
this.priceChange.emit(num);
}, 1000);
}
app组件模板代码
<app-price-quote (priceChange)="onPriceChange($event)"></app-price-quote>
<p>app组件:{{price}}</p>
app组件控制器代码
price: string;
constructor() {}
onPriceChange(price: number) {
this.price = price.toString();
}
中间人模式
编写组件时要考虑可重用性,要解耦。故先考虑好那些组件要重用,需要那些中间人,然后再写代码。
Json.stringfy
Last updated
Was this helpful?