angular2父子组件通讯,可以通过:在父组件的模板中绑定变量,在子组件的属性用 @Input 进行修饰。
现在遇到的问题是:一般变量,可以通过这种方式来通讯,但遇到需要加载其他资源,比如ajax这种异步加装变量的方式,就会导致错误。
父组件:
//html
<div class="modifymember-wrap">
<addmember [adminData]="admin"></addmember>
</div>
//ts
this.managerService.selectedAdmin.subscribe(data => {
this.admin = data;
});
managerService为一个服务,里面的selectedAdmin方法是get(),异步操作。
子组件:
@Input() adminData;
ngOnInit() {
let admin = adminData;
console.log('admin');
}
ngAfterViewInit() {
let admin = adminData;
console.log('admin');
}
因为是异步操作,当加载网页的时候,子组件会先于父组件加载,导致子组件里的变量admin在没有获取到父组件传递的值之前就已经执行了,导致错误。
这样的问题,需要如何处理?
manager.service.ts
add-member.component.ts
app.component.ts
可以先看一下这篇文章 Angular 2 AsyncPipe,也可以使用AsyncPipe,但文中提到的问题,要注意一下哈。另外组件生命周期中各个钩子的作用及执行顺序也要去了解一下。