У меня возникли серьезные проблемы с попыткой выполнить некоторую логику внутри функции обратного вызова событий (click)
в Угловом 2 без запуска обнаружения изменений.Угловой 2-обратный вызов события вызова без срабатывания обнаружения изменений
Почему я не хочу, чтобы вызвать обнаружение изменения
Функцию обратного вызова выполняет простые анимированные прокрутки к началу. Это не влияет на другие компоненты, и поэтому мне не нужно менять обнаружение, чтобы стрелять в каждом компоненте, на самом деле я действительно не хочу, чтобы он срабатывал! Поскольку обнаружение изменений срабатывает в каждом компоненте, производительность анимации на мобильных устройствах крайне низок.
То, что я пытался
Я знаю, что я могу запустить код за пределами зоны с использованием
this._zone.runOutsideAngular(() => {
someFunction();
})
Это хорошо работает, когда код, который вы хотите запустить вне зоны не вызывается по событию click
, keyup
, keydown
и т.д.
Потому что мой компонент выглядит ...
<button (click)="doThing()">Do that thing outside the zone!</button>
doThing() {
this._zone.runOutsideAngular(() => {
myFunction();
})
}
... myFunction
будет работать вне зоны, но click
событие вызовет обнаружение изменений.
Я уже реализовал OnPush
стратегию обнаружения изменений во многих моих компонентах, насколько это возможно.
Важно, что обнаружение изменений не запускается здесь, но я не могу найти способ предотвратить его.
Редактировать Смотрите эту plnk с обнаружением изменений, установленным в OnPush
во всех компонентах. Щелчок по кнопке компонента субстроя запускает компакт-диск в компонентах подземелья, ряда и приложений.
Вы пытались использовать 'changeDetection: ChangeDetectionStrategy.OnPush' в' @Component ({}) 'декодера этого компонента ??? – micronyks