В Angular 1 обнаружение изменений было связано с грязной проверкой иерархии $scope. Мы будем неявно или явно создавать наблюдателей в наших шаблонах, контроллерах или компонентах.
В Angular 2 у нас больше нет $scope, но мы переопределяем setInterval, setTimeout и др. Я могу видеть, как Angular может использовать это для запуска $digest, но как Angular определяет, что изменилось, особенно учитывая, что Object.observe никогда не попадал в браузер?
Пример
Вот простой пример. Объект, определенный в службе, обновляется в setInterval. DOM перекомпилирует каждый интервал.
Как Angular может сказать, что AppComponent наблюдает за службой и что значение атрибута службы изменилось?
var InjectedService = function() {
var val = {a:1}
setInterval(() => val.a++, 1000);
return val;
}
var AppComponent = ng.core
.Component({
selector: "app",
template:
`
{{service.a}}
`
})
.Class({
constructor: function(service) {
this.service = service;
}
})
AppComponent.parameters = [ new ng.core.Inject( InjectedService ) ];
document.addEventListener('DOMContentLoaded', function() {
ng.platform.browser.bootstrap(AppComponent, [InjectedService])
});