由于 @ViewChild,构造函数在 *ngFor 中被重复调用

constructor being called duplicate in *ngFor due to @ViewChild

我创建了一个 angular 2 组件,我在 *ngFor 指令中使用它,似乎每个实例都调用了两次构造函数。

因此,如果我有 2 条记录返回到我的集合中,我的组件的构造函数将输入 4 次。如果我有三个构造函数被解雇了 6 次。

这给我带来了问题,因为我在构造函数中订阅了 RxJs observables,因此我的事件被重复执行,所以在处理删除事件时,代码试图多次删除相同的记录,所以在第一次之后失败(成功)调用。

代码结构如下:

最外面的组件

<div class="list-row-container" *ngFor="let holiday of holidays">
  <div style="border:1px; border-style: solid; margin: 5px;">
  <div style="margin: 5px;">
  <extended-inline-edit actionClass="fa-calendar" 
  [entityId]="holiday.id">
        <holiday-view-body view-body [holiday]="holiday"></holiday-view-
  body>
        <holiday-edit-body edit-body [holiday]="holiday" [venueId]="venueId" 
  [year]="year"></holiday-edit-body>
      </extended-inline-edit>
    </div>
  </div>
</div>

我受影响的组件是 holiday-edit-body 组件,它被嵌入到我的 extended-inline-edit托管它的组件(不知道嵌入是否会影响构造函数被触发的次数?)

我的集合填充在最外层组件的 ngOnInit 中,holidays.ts 如下:

  ngOnInit() {

    this.holidayService.getVenueHolidayInheritanceIndicator(this.venueId).then((data) => {
      this.inheritFromAccount = data.sameAsAccount;
      if (this.inheritFromAccount === false) {
        this.loadVenueHolidays();
      } else {
        this.loadAccountHolidays();
      }
    });
  }

  loadVenueHolidays() {
    this.holidayService.getVenueHolidays(this.venueId, this.year).then((data) => {
      this.holidays = data;
    });
  }

我的问题似乎是由层次结构更上层的一个组件引起的,该组件引用了我的 "Parent" 具有 @ViewChild 属性的组件,在此代码中,正在调用以刷新我的集合,因此从数据库中检索了 2 个假期,并且根据 *ngFor 创建了我的组件,然后此刷新调用再次带来了两个假期并且 *ngFor 再次触发(我假设???? ) 所以我的事件被连接了两次。

我摆脱了刷新的调用,但是这仍然会发生在其他事件上,因此在我的组件的 ngOnDestroy 方法中取消订阅,如下所示,以确保没有错误的订阅! (仍然从构造函数设置订阅)

  ngOnDestroy() {
    this.clearDownSubscriptions();
  }

  clearDownSubscriptions(){
    this.deleteHolidaySubscription.unsubscribe();
    this.asideCloseSubscription.unsubscribe();
    this.scheduleSavedSubcription.unsubscribe();
    this.saveHolidaySubscription.unsubscribe();
    this.editToggledSubscription.unsubscribe();
    this.performActionSubscription.unsubscribe();
  }