Обнаружение изменений не работает после использования собственного JS
У меня есть приложение Angular 2, которое строит дерево с помощью mermaidJS, которое является JS (не TS) фреймворком.
Чтобы привязать клики по этому дереву к угловым событиям, в моем методе ngOnInit()
я создаю оконные функции, такие как:
window['myFunctionToBeCalledFromTheTree'] = () => { ...}
Все это прекрасно работает.
Проблема, которая возникает, заключается в том, что как только любая из этих функций вызывается, Angular больше не обнаруживает изменений. Я нашел быстрый обходной путь с детектором изменений, но я должен звонить ему каждый раз.Мой questoin это, есть ли способ, чтобы вернуть его автоматическое определение изменения углового ?
1 ответ:
Проблема в том, что код в вашем обратном вызове работает вне угловой зоны. Вам нужно запустить его внутри угловой зоны:
window['myFunctionToBeCalledFromTheTree'] = () => { this.zone.run(() => { ... } }
Вы не можете использовать детектор изменений здесь, потому что изменения, сделанные во время обнаружения изменений, не будут выбраны следующим циклом обнаружения изменений.