尝试在Click侦听器上使用“行为主题”进行订阅,并在进行订阅的组件的第一次加载时仅从服务中获取空对象;
ngOnInit() {
this.shareDataService.dataUpdate$.subscribe(success =>{
this.data = success;
})
}
我尝试使用可观察和异步管道,结果是相同的。服务为providedIn: 'root'
。如果订阅位于ngOnChanges(changes: SimpleChanges) {}
生命周期中,则每次单击都会触发钩子订阅,但始终有空对象。
我试图在stackblitz上重现它,并且一切正常。对象从object-sender
组件发送到服务;
this.shareDataService.dataVisibility(this.data);
receiver
组件中收到对象,这是预期的行为,所以我不知道为什么应用程序中没有空对象。
可能是什么问题?
答案 0 :(得分:1)
这是预期的行为。
您是在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 = {};