前端之家收集整理的这篇文章主要介绍了
Angular2 父子组件通信方式的示例,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Angular2官方文档对组件交互这块有详细的介绍-->文档--组件之间的交互。按文档介绍,组件间交互的方式一共有4种,包括:
- 通过输入型绑定把数据从父组件传到子组件(@Input decoration);子组件暴露一个EventEmitter属性(@Output decoration),当事件发生时,利用该属性emits向父组件发射事件。
- 父组件与子组件通过本地变量互动。(# var)
- 父组件调用@ViewChild。
- 父组件和子组件通过服务来通讯。
我在这里只总结、详细介绍3种我在项目中使用过的方法,看完本文大概能做到如下的效果:
创建项目,项目结构如下:
通过@Input、@Output装饰器进行父、子组件间的通信
@Input:该属性绑定用于父组件向子组件传递数据。子组件可以通过以下两种方法截取属性的变更:
- 使用一个输入属性的setter,以拦截父组件中值得变化。
- 通过ngOnchanges()来截听输入属性值的变化。
@Output:该数据绑定用于子组件向父组件传递数据和事件。
//子组件
@Input() fromParent; //ts中,用于直接接收从父组件获取的数据
[(ngModel)]="fromParent" //html中,用于显示数据
通过setter截听输入属性值的变化,在子组件中声明一个私有变量来获取父组件传递过来的数据,从而屏蔽上层获取下层信息。(简单一点就是不让父组件知道子组件用什么东西去接收传过来的数据)通过这种方法也可以获得同样的效果。
@Output:父组件接收子组件的数据时,子组件暴露一个EventEmitter属性,当事件发生时,子组件利用该属性emits(向上弹射)事件。父组件绑定到这个事件属性,并在事件发生时作出回应。核心代码如下:
//事件处理函数
fromChild(event) {
console.log(event);
this.contentFromChild = event;
}
如果父组件的类需要读取子组件的属性和值或调用子组件的方法时,就可以把子组件作为ViewChild,注入到父组件里面。ViewChild顾名思义就是可以看见子组件里面的属性和方法。