尝试在Click侦听器上使用行为主题进行订阅,并且在进行订阅的组件的第一次加载时仅从服务中获取空对象;
ngOnInit() {
this.shareDataService.dataUpdate$.subscribe(success =>{
this.data = success;
})
}
我尝试过使用可观察和异步管道,结果是相同的。服务是providedIn: 'root'
。如果订阅位于ngOnChanges(changes: SimpleChanges) {}
中,则生命周期挂钩订阅会在每次点击时触发,但始终有空对象。
我试图在stackblitz上重现它,并且一切正常。对象从object-sender
组件发送到服务;
this.shareDataService.dataVisibility(this.data);
receiver
组件中收到对象,这是预期的行为,所以我不知道为什么应用程序中没有空对象。
可能是什么问题?
这是预期的行为。
您正在从ngOnInit生命周期中的对象发送方组件发送数据。
export class ObjectSenderComponent implements OnInit {
constructor(private shareDataService: ShareDataService) { }
data: Object = {};
ngOnInit() {
this.shareDataService.dataVisibility(this.data);
}
onClick = () => {
this.data = {
dataName: "Data",
dataVisible: true
}
this.shareDataService.dataVisibility(this.data);
}
}
使用异步管道将组件添加/删除到dom`
<app-receiver
*ngIf="shareDataService.isBtnClicked$ | async"
></app-receiver>
这意味着每次您单击此按钮时,它将被销毁并初始化。
<button (click)="onClick()"> Get Object </button>
并且每次都会调用ngOnInit生命周期挂钩。因此,每次您从dom中删除对象发送方组件并读取它时,它将发送此数据;
data: Object = {};