ngOnInit 在角度分量中被调用两次

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

第一次当我启动服务并打开组件时,一切都很完美,每个请求都被调用一次。然后我关闭组件并再次打开它,ngOnInit 被调用两次。 我的 ngOnInit QueryDispatcher 和 CommandDispatcher 里面有,所以它们调用了两次,并且 html 中的子组件也有自己的请求/响应,他的 ngOninit 也调用了两次。 对那些人有什么想法吗? 谢谢

kisOnInit(getResponse: GetResponse) {
    this.modalService.getData();
    if (modalData && modalData.data.seostatudDokumentOid)
    {
      this.seostatudDokumentOid = modalData.data.seostatudDokumentOid;
      this.seostatudDokumentIdList.push(this.seostatudDokumentOid);
    }
    this.menetlusService.getCurrentMenetlus()
      .subscribe((menetlus) =>  this.menetlus = menetlus);

    this.kasutaja =  this.authService.currentUserValue;
    this.response = getResponse;

    this.queryDispatcher
      .dispatch(new GetMenetluseFailidRequest(this.menetlus.objektId,  this.dokumentObjektId), null, this.destroy$ )
      .pipe()
      .subscribe((value: GetMenetluseFailidResponse) => {
        this.failResponse = value.dokumendiFailList;
      });
}

例如 GetMenetluseFailidRequest 被调用两次

angular initialization ngoninit
1个回答
0
投票

组件销毁后,所有订阅都需要取消订阅!

如果您不取消订阅,那么即使您销毁该组件,订阅也会继续存在,并给您留下订阅发生多次的印象!

您可以使用下面的参考代码来阻止这个!

import { Subscription } from 'rxjs';
...

...
export class SomeComponent {

    private sub: Subscription = new Subscription();

    ...
    ngOnInit() {
        // add all the subscriptions to the sub to unsubscribe altogether
        this.sub.add(
             this.menetlusService.getCurrentMenetlus()
                 .subscribe((menetlus) =>  this.menetlus = menetlus);
        );
    }
    ...
    
    ngOnDestroy() {
        this.sub.unsubscribe();
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.