ChaneDetection и NgZone - лучшая комбинация всегда, чтобы избежать ненужного ChangeDetection

у меня естьfunction noificationHandler() в моем service.ts это вне контекста angular.noificationHandler() вызывается третьей стороной иnoificationHandler() в основном использует массив и передает массив компонентам, которые подписались на его сервис.

service.ts

    public mySubject: Subject<any> = new Subject();
    public myObservable = this.mySubject.asObservable();

    constructor() {
       this.registry.subscribe("notification.msg",this.noificationHandler.bind(this));
    }

    noificationHandler(data) {
       this.publishUpdate(data)
    }

    publishUpdate(data) {
       this.mySubject.next(data);
    }

component.ts

constructor(private service: myService) {
    this.service.myObservable.subscribe(list => {
        this.list = list;
    });
}

^^^ на данный момент шаблон не обновляется с новыми данными

Поскольку"notification.msg" находится вне зоны angular, обнаружение изменения угла s не запускается, когда это событие("notification.msg") вызывается.

Теперь есть 2 способа вызвать обнаружение изменений.

1) ЗаворачиваяnoificationHandler() внутри зоны angular.run ()

 this.registry.subscribe("a2mevent.notification.msg", this.ngZone.run(() => this.noificationHandler.bind(this)));

2) Индивидуально попросив компонент обнаружить изменения

constructor(private service: myService, private ref: ChangeDetectorRef) {
    this.service.myObservable.subscribe(list => {
        this.list = list;
        this.ref.detectChanges(); // <==== manually invoking change detection
    });
}

Оба варианта работают! И моя компонентная структура выглядит следующим образом

A --> root component
B
C
D // my component is here (4 levels of nesting)

Вопросы -

1) Будет ли DetectChanges () обнаруживать изменения только для своих собственных компонентов или будет также запускать обнаружение изменений на дочерних компонентах?

2) будет ли zone.run () запускать обнаружение изменений всех компонентов от корня до листа?

Среди zone.run () и detectChanges () мне любопытно, что лучше вспектакль?

Ответы на вопрос(2)

Ваш ответ на вопрос