Как работает этот фрагмент кода, обнаруживающий изменение angular?

ngAfterViewinit(){ 
var f=function(){
      this.a="changing val"
    }
    document.getElementById('d').addEventListener('click',f.bind(this));
}

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

В этом я использую собственное событие dom; если бы мы использовали angularjs, нам пришлось бы запускать цикл дайджеста вручную, но как здесь angular узнает, даже если событие клика находится вне контекста?


person user11561629    schedule 08.10.2019    source источник
comment
Пожалуйста, не используйте этот код в продакшне, у Angular есть лучший способ сделать то же самое.   -  person Akxe    schedule 09.10.2019


Ответы (1)


Каждый обратный вызов, который вы регистрируете в коде Angular, перехватывается Zone, и Angular впоследствии получает уведомление, чтобы инициировать обнаружение изменений. Зоны работают путем исправления собственных методов DOM, в данном случае addEventListener. На данный момент этот метод больше не является родным методом браузера, а является заменой zone.js, который позволяет вам делать то, что вы хотели, но впоследствии информирует Angular.

person Wolfgang Stengel    schedule 08.10.2019