Обнаружение изменений не работает после использования собственного JS


У меня есть приложение Angular 2, которое строит дерево с помощью mermaidJS, которое является JS (не TS) фреймворком.

Чтобы привязать клики по этому дереву к угловым событиям, в моем методе ngOnInit() я создаю оконные функции, такие как:

window['myFunctionToBeCalledFromTheTree'] = () => { ...}

Все это прекрасно работает.

Проблема, которая возникает, заключается в том, что как только любая из этих функций вызывается, Angular больше не обнаруживает изменений. Я нашел быстрый обходной путь с детектором изменений, но я должен звонить ему каждый раз.

Мой questoin это, есть ли способ, чтобы вернуть его автоматическое определение изменения углового ?

1 2

1 ответ:

Проблема в том, что код в вашем обратном вызове работает вне угловой зоны. Вам нужно запустить его внутри угловой зоны:

window['myFunctionToBeCalledFromTheTree'] = () => { this.zone.run(() => { ... } }

Вы не можете использовать детектор изменений здесь, потому что изменения, сделанные во время обнаружения изменений, не будут выбраны следующим циклом обнаружения изменений.