Angular组件之间的通信方式分为 三种:
- 父组件向子组件通信(输入属性)
- 子组件向父组件通信(输出属性)
- 使用中间人模式通信
下面详细的介绍不同通信方式的实现方法:
一、父组件向子组件通信(输入属性)
分为两步:
1、在子组件上定义自己要接受父组件输入的参数:
@Input()
stockCode: string;
@Input()
amount: number;
//@Input()修饰器表示stockCode、amount是要接受父组件传入属性的变量
2、在父组件的HTML模板中声明要输入的数据:
<app-bind [stockCode]="stock" [amount]="data"></app-bind>
//主要输入属性的name要一致,<app-bind>是子组件
二、子组件向父组件通信(输出属性)
分为三步:
1、在子组件中设置要输出的类型:
@Output()
lastPrice: EventEmitter<PriceQuote> = new EventEmitter();
//@Output()修饰器修饰要输出的变量
//PriceQuote这个泛型指的是:输出的变量类型
2、在html模板中设置事件:
<app-price-quote (lastPrice)="priceQuoteHandler($event)"></app-price-quote>
//lastPrice 是在子组件中设置的输出变量的name
//<app-price-quote>是子组件
//$event 保留了事件触发的dom的所有属性
3、在父组件的控制器中接收输出属性
priceQuote: PriceQuote = new PriceQuote('', 0);
//声明一个和输出变量类型相同的变量
priceQuoteHandler(event: PriceQuote) {
this.priceQuote = event;
}
//事件,用于接收输出属性
三、使用中间人模式通信
所谓中间人模式就是:当A =》 C 通信时,先将A =》B,B=》C,
B就是所谓中间人模式;
按照情况一般分为两种:
1、兄弟组件通信
这里我们选择父组件做为中间人,先是使用输出属性,再使用输入属性就OK了
2、非兄弟组件通信
选择一个依赖注入service做为中间人,然后进行通信。