Angular订阅仅触发一次

时间:2019-05-03 19:46:59

标签: angular rxjs observable angular-services behaviorsubject

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

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

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

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

this.shareDataService.dataVisibility(this.data);

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

可能是什么问题?

1 个答案:

答案 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 = {};