Angular 5 не обнаруживает изменений во время длительной операции, даже если я использую setTimeout
Я пытаюсь показать индикатор выполнения ngx-bootstrap, когда мое приложение загружает данные из файла csv.
Проблема: пользовательский интерфейс заморожен, пока не закончится вся операция
Я использовал setTimeout для разделения загрузки и вызывал ее рекурсивно. Я также пытался вызвать ngZone.run() и applicationRef.tick() и changeDetectorRef.markForCheck() ... без какого-либо успеха индикатор выполнения отображается только полностью в конце операции.
Я сделал более простой стек, чтобы вы, ребята, могли показать мне, как я могу это реализовать. в моем коде намного проще bcs, я помещаю его в сервис и получаю результаты через наблюдаемые. но если это сработает по крайней мере, я бы знал, что я делаю не так. https://stackblitz.com/edit/angular-gzdylf
1 ответ
В вашем примере, где вы используете setTimeout
разделить работу, которую вы делаете это:
setTimeout(work());
Это означает, что вы вызываете work
функция внутри цикла вместо того, чтобы планировать его запуск позже.
Вам нужно изменить его, чтобы передать ссылку на функцию setTimeout
чтобы заставить его работать как положено:
setTimeout(work); // NOTE: `work` and not `work()`