Обнаружение угловых изменений для обновления только частичной страницы - PullRequest
0 голосов
/ 08 октября 2018

Я работаю над угловым приложением 5.2.У меня есть 10 вкладок в моем базовом компоненте.и каждая вкладка имеет свой собственный компонент (4 компонента).Так что каждая моя вкладка имеет очень тяжелую обработку.Теперь мой вопрос: если я обновлю какой-либо дочерний компонент Tab, то angular запустит changeDetection на всех вкладках и их дочернем компоненте, что сделает мое приложение очень медленным.

Есть ли способ сообщить угловомузапустить Обнаружение изменений на определенной части страницы?Я знаю, это звучит немного странно, но мне нужно улучшить производительность приложения, и реальная проблема, я вижу, в том, что обнаружение изменений запускается для всей страницы (10 вкладок и каждая вкладка с 4 компонентами).

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

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Вы можете использовать ловушку жизненного цикла ngDoCheck, чтобы проверить наличие мутаций объекта и уведомить Angular с помощью метода markForCheck.


export class AComponent {
  @Input() o;  constructor(private cd: ChangeDetectorRef) {}

  ngOnChanges() {
    // every time the object changes 
    // store the new `id`
    this.id = this.o.id;
  }

  ngDoCheck() {
    // check for object mutation
    if (this.id !== this.o.id) {
      this.cd.markForCheck();
    }
  }
}
0 голосов
/ 08 октября 2018

Вы можете использовать ChangeDetectionStrategy.OnPush

import {..., ChangeDetectionStrategy } from '@angular/core';

@Component({
  ...
  changeDetection: ChangeDetectionStrategy.OnPush
})
export class CounterComponent {
  @Input() data;
}

Вручную пометить для обнаружения изменений.

import {..., ChangeDetectorRef } from '@angular/core';

export class CounterComponent {
    constructor(private cd: ChangeDetectorRef) {}
  ...
  ngOnInit() {
    this.data.subscribe((value) => {
      this._data = value;
      // tell CD to verify this subtree
      this.cd.markForCheck();
    });
  }
}

См. Документ для информации: https://angular.io/api/core/ChangeDetectorRef

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