Как настроить компонент Angular так, чтобы обнаружение изменений не запускалось для всего приложения, а только для самого компонента и его дочерних элементов?
Рабочий пример: https://stackblitz.com/edit/angular-irc-starter-4txpbu?file=app%2Ftimer%2Ftimer.component.ts
Есть счетчик, увеличивающий значение на единицу каждую секунду. Это TimerComponent, и он работает по назначению - значение увеличивается и обновляется каждую секунду.
@Component({
selector: 'app-timer',
template: `{{value}}`
})
export class TimerComponent implements OnInit {
value: number = 0;
ngOnInit() {
setInterval(() => this.value++, 1000);
}
}
Однако посмотрите на родительский компонент AppComponent.
<h3>Internal timer:</h3>
<p>Should not perform change detection for the whole app</p>
<app-timer></app-timer>
<h3>External binding</h3>
<p>Should not be updated after timer changes</p>
<p>{{someBindingProperty}}</p>
someBindingProperty - получатель:
get someBindingProperty() {
this.bindingTimer++;
return this.bindingTimer;
}
Проблема: когда TimerComponent увеличивает значение, обнаружение изменений срабатывает для всего приложения. Можно ли активировать обнаружение изменений только в компоненте и дочерних элементах?
Примечание: если я добавлю к TimerComponent:
changeDetection: ChangeDetectionStrategy.OnPush
Тогда изменения не обнаруживаются в этом компоненте, но обнаружение изменений по-прежнему запускается для всего приложения. Так что это не выход.