Angular 7 view инициализирует вызовы несколько раз - PullRequest
0 голосов
/ 04 февраля 2019

В ngAfterViewInit() я вызываю асинхронный метод (пробовал с и без await) для инициализации таблицы собраний:

public async getMeetings() {
  this.pendingOperation = false;
  try {
    var { meetingsUrl, bearerToken } = await this.getMeetingsUrl();

    var authAndJsonContentHeaderOption = {
      headers: {
        "Authorization": `Bearer ${bearerToken}`,
        "Content-Type": "application/json"
      }
    };

    var httpResult = await this.http.get<any>(meetingsUrl, authAndJsonContentHeaderOption).toPromise();

    this.meetings = new Array();
    httpResult._embedded.myOnlineMeeting.forEach(element => {
      this.meetings.push(element);
    });
    this.pagedMeetings = this.meetings.slice(0, this.pageSize);
    setTimeout(() => {
      this.observablePagedMeetings.next(this.pagedMeetings);
    }, 100);


  }
  catch (ex) {
    this.errors = `Error: ${ex.message}`;
    console.log(`Error: ${ex.message}`);
  }
  this.pendingOperation = false;

}

Как видно из кода выше, найденный списоксобраний отправляется на Subject, так что представление может отображать его в разбивке на страницы материала.

ngAfterViewInit() довольно просто:

ngAfterViewInit() {
  this.filteredUsers.subscribe((filteredUsers) => {
    this.displayedUsers = filteredUsers;
  });
  this.matAutocomplete._keyManager.change.subscribe((index) => {
    if (index >= 0) {
      this.selectedUser = index;
    }
  });

  this.getMeetings();
}

HTML это:

  <table mat-table *ngIf="pagedMeetings" [dataSource]="observablePagedMeetings" style="width: 100%">
<!-- table markup -->
  </table>

Проблема в том, что этот getMeetings() вызывается несколько раз, а не один раз.

До сих пор я пытался:

  • , используя setTimeout, чтобы отложить этот вызов
  • указание ChangeDetectionStrategy.OnPush для этого компонента (как предложено здесь ) для выхода из возможного цикла обнаружения изменений.

Редактировать:

  • Действительно, ngAfterViewInit() сам вызывается несколько раз
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...