Моя точка останова в обнаружении изменений Angular не срабатывает при checkAndUpdateView()

#angular #angular-changedetection

#angular #angular-changedetection

Вопрос:

После этой хорошей статьи об обнаружении изменений angular я хотел отладить функцию checkAndUpdateView. Однако она никогда не срабатывает.

введите описание изображения здесь

Чего мне не хватает? Я пробовал с последними версиями Chrome и Firefox.

Комментарии:

1. можете ли вы предоставить больше контекста и поделиться кодом? какой компонент, как настроен, его код, как вы пытаетесь запустить обнаружение и т.д.

Ответ №1:

Эта статья старая, с 2018 года, и с тех пор Angular представила компилятор Ivy, который полностью переработал внутренности Angular. Если вы используете Angular 9 или более позднюю версию, эта точка останова не будет достигнута. Я тестировал приложения Angular 7, 8 и 9. Версии 7 и 8 достигли точки останова, а приложение Angular 9 — нет.

Я бы предложил использовать этот компонент для отладки обнаружения изменений. Добавьте его в свое приложение, и оно будет считать циклы обнаружения изменений.

debug-change-detection.component.ts:

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

@Component({
  selector: 'app-debug-change-detection',
  template: '<p class="number">{{check()}} zone checks</p>',
  styles: [`
        :host {
          position: absolute;
          left: 10px;
          bottom: 0;
          display: block;
        }
        .number {
          display: block;
        }
    `]
})

export class DebugChangeDetectionComponent {

  count = 0;

  constructor(private zone: NgZone) { }

  check() {
    this.zone.runOutsideAngular(() => {
      setTimeout(() => this.count = this.count   1);
    });
    return this.count;
  }
}
  

Комментарии:

1. О, я понимаю. У меня уже есть все это, я просто хотел отладить его вручную, чтобы понять, что происходит под капотом. Значит, нет способа отладить ее в браузере со времен Ivy?

2. Я не думаю, что есть одна точка останова, которая поможет вам понять, что происходит под капотом. Это довольно сложно….

3. Ну, так и было, пока не появился ivy. checkAndUpdateView — это то, что я ищу. Почему точка останова больше не останавливает ее? Я сомневаюсь, что они изменили весь механизм обнаружения изменений.

4. я просто погуглил «точку останова обнаружения изменений ivy» и нашел это: тот же автор: indepth.dev / …

5. Я тоже это обнаружил 🙂 Я думал, вы знаете об этом больше. Я принимаю ваш ответ: «Версии 7 и 8 достигли точки останова, а приложение Angular 9 — нет». мне помогло. Спасибо