角度订阅仅触发一次

问题描述 投票:0回答:1

尝试在Click侦听器上使用行为主题进行订阅,并且在进行订阅的组件的第一次加载时仅从服务中获取空对象;

ngOnInit() {
    this.shareDataService.dataUpdate$.subscribe(success =>{
      this.data = success;
    })
  }

我尝试过使用可观察和异步管道,结果是相同的。服务是providedIn: 'root'。如果订阅位于ngOnChanges(changes: SimpleChanges) {}中,则生命周期挂钩订阅会在每次点击时触发,但始终有空对象。

我试图在stackblitz上重现它,并且一切正常。对象从object-sender组件发送到服务;

this.shareDataService.dataVisibility(this.data);

receiver组件中收到对象,这是预期的行为,所以我不知道为什么应用程序中没有空对象。

可能是什么问题?

angular rxjs observable angular-services behaviorsubject
1个回答
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 = {};
© www.soinside.com 2019 - 2024. All rights reserved.