Стратегия обнаружения Angular 2 OnPush - PullRequest
0 голосов
/ 09 сентября 2018

У меня проблема с пониманием стратегии обнаружения Angular OnPush. Когда я выполняю некоторые асинхронные действия (такие как открытое наложение из TS, чтобы не вызывать обнаружение изменений в компоненте с помощью стратегии OnPush), и после этого я щелкаю в любом месте или вызываю другие события обнаружения (не в моем компоненте), он изменяется (открывается оверлей). Почему это происходит? У меня слишком много таких компонентов на странице (производительность становится очень плохой, когда у меня 15-20 единиц), поэтому мне нужно отключить обнаружение, как я могу это сделать? Я пытался использовать метод detach () , но мне все еще нужны изменения после простых событий в моих компонентах.

1 Ответ

0 голосов
/ 09 сентября 2018

Это подробно объясняет onPush: https://netbasal.com/a-comprehensive-guide-to-angular-onpush-change-detection-strategy-5bac493074a4

Он срабатывает при изменении @Input или при возникновении события.

ChangeDetectorRef знает несколько методов, которые могут быть интересны

Звучит так, будто вы хотите отсоединить и подключить вручную:

constructor(private cd: ChangeDetectorRef){}

public ngOnInit() {
  this.cd.detach();

  // do stuff

  this.cd.reattach();
}

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

Хотя это также звучит так, как будто вы хотите переосмыслить структуру компонентов, поскольку вы хотите как можно меньше возиться с обнаружением изменений, чтобы избежать ошибок пользовательского интерфейса.

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