Angular 5 - метод Mat-tab, вызываемый внутри * ngFor, выполняется несколько раз

У меня есть сомнения, что когда я вызываю функцию внутри *ngFor , она выполняется несколько раз, число которых больше, чем элементов в массиве tabsName . Вот код ниже:

     <mat-tab-group>
      <mat-tab  *ngFor="let tab of tabsName">
        <ng-template mat-tab-label>
          {{getTabName(tab)}}
          <span class="badge">{{getTabCount(tab)}}</span>
        </ng-template>
        <div *ngTemplateOutlet="comments"></div>
      </mat-tab>
    </mat-tab-group>  


    <ng-template #comments>
      <div class="col-sm-9 jj-pad-0">Deep</div>
</ng-template>

После реализации всех хуков жизненного цикла компонента стало известно, что некоторые методы хуков жизненного цикла вызываются снова и снова.

Я хотел знать, это правильное поведение или нет?

Свойства tabsName — имя и количество. Имя и счет, которые я получаю от службы, делающей вызов на отдых.

tabsName : [{имя: 'tab1', количество: '2'}, {имя: 'tab2', количество: '1'}]

Ниже находится файл ts.

export class TabsComponent implements OnInit {

  @Input() tabsName: any;
  @Input() template: TemplateRef<any>;
  @Output() tabSelected: EventEmitter<any> = new EventEmitter();

  constructor(private service: SomeService) {

  }

getTabName(tab): string {

    return this.service.configData[tab]['UILabel'];
  }

  getTabCount(tab): number {
    if (this.service.dataMap) {
      return this.service.dataMap.get(this.service.configData[tab]['dataType']).data.length;
    }
  }

  onSelect(event) {
    this.tabSelected.emit(event);
  }

}

person Harmandeep Singh Kalsi    schedule 20.10.2018    source источник
comment
Вызовы функций, привязанные к шаблону в выражении, будут выполняться каждый раз, когда выполняется обнаружение изменений. Так что это ожидаемое поведение   -  person Jota.Toledo    schedule 21.10.2018


Ответы (1)


То, как вы используете *ngFor, кажется мне неправильным, вместо этого должно быть {{ tab.getTabName }} и
{{ tab.getTabCount }}.

person Richard Pariath    schedule 20.10.2018
comment
Спасибо за комментарий . В соответствии с моим требованием я должен передать вкладку внутри функций getTabCount и getTabName, таких как getTabCount (tab1) или getTabCount (tab2), и получить счет для этой конкретной вкладки. Можете ли вы предложить, как я могу этого добиться? - person Harmandeep Singh Kalsi; 21.10.2018
comment
Можете ли вы отредактировать вопрос, а также добавить необходимый файл .ts и свойства, связанные с tabsName? А также откуда вы получаете getTabCount, getTabName. - person Richard Pariath; 21.10.2018
comment
Я обновил вопрос, надеюсь, теперь это поможет. Пожалуйста, дайте мне знать, если у вас все еще есть какие-либо сомнения. - person Harmandeep Singh Kalsi; 21.10.2018