angular 5: компонент приложения перерисовывается несколько раз

Мой app.component.html:

{{bla()}}

Мой app.component.ts:

import {Component, OnInit, AfterViewInit} from '@angular/core';

@Component({
    selector: 'idr-app-root',
    templateUrl: './app.component.html',
    styleUrls: ['./app.component.scss']
})
export class AppComponent implements AfterViewInit {
    constructor() {}
    ngAfterViewInit() {}

    bla(){
        console.log(77777);
    }
}

Мой app.module.ts:

import {BrowserModule} from '@angular/platform-browser';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';

@NgModule({
    declarations: [
        AppComponent,
    ],
    imports: [
      BrowserModule,


     BrowserAnimationsModule,
    ],
    providers: [

    ],
    bootstrap: [AppComponent],
})
export class AppModule {
}

В консоли вижу такую ​​ситуацию:

app.component.ts:13 77777
app.component.ts:13 77777
core.js:3688 Angular is running in the development mode. Call enableProdMode() to enable the production mode.
app.component.ts:13 77777
app.component.ts:13 77777

И если я использую что-то вроде этого {{bla()}} в дочернем компоненте, 77777 показывает гораздо больше раз

Так кто-нибудь знает, почему он перерисовывает несколько раз?


person Olga Matosova    schedule 12.10.2018    source источник
comment
Возможный дубликат функции вызывается несколько раз   -  person ConnorsFan    schedule 12.10.2018


Ответы (1)


Это связано со стратегией обнаружения изменений Angular по умолчанию. Если вы измените стратегию на onPush, вы увидите, что функция выполняется только один раз.

Вот пример StackBlitz: https://stackblitz.com/edit/angular-dfhfs7?file=src%2Fapp%2Fapp.component.ts

Если вы закомментируете обнаружение изменений или установите его по умолчанию, вы увидите оператор консоли несколько раз. Если вы установите для него значение onPush, вы увидите оператор журнала только один раз.

Вот статья, которая может помочь: https://netbasal.com/a-comprehensive-guide-to-angular-onpush-change-detection-strategy-5bac493074a4

person Brandon    schedule 12.10.2018
comment
Итак, будет ли проблематично оставить стратегию обнаружения изменений по умолчанию? Потому что у меня есть журнал, который я вижу, который появляется в консоли около 50 раз. Это практически означает, что оператор выполняется около 50 раз, не так ли? Разве это не будет хитом производительности? - person Romeo Sierra; 21.01.2020
comment
@RomeoSierra Может быть, в зависимости от количества присутствующих компонентов и других факторов. Обычно я всегда отключаю обнаружение изменений по умолчанию. - person Brandon; 21.01.2020
comment
Я понимаю. Спасибо за полезную информацию @Brandon! :) - person Romeo Sierra; 22.01.2020