169 похожих чатов

Ещё раз плиз, как это работает? что в этом коде запускает

detectChange?
ведь setTimeout отработал до того, как выставился флаг markForCheck. Почему ангуляр всё равно на него реагирует?
https://stackblitz.com/edit/stackblitz-starters-b5lzwv?description=An%20angular-cli%20project%20based%20on%20@angular/animations,%20@angular/common,%20@angular/compiler,%20@angular/core,%20@angular/forms,%20@angular/platform-browser,%20@angular/platform-browser-dynamic,%20@angular/router,%20core-js,%20rxjs,%20tslib%20and%20zone.js&file=src%2Fmain.ts&title=Angular%20Starter

15 ответов

18 просмотров

Так вы в сет тайм-ауте делаете то, что дёргает компонент Если там будет не работа с cd, то компонент не увидит

Глеб-Щукин Автор вопроса
Максим Федоров
Так вы в сет тайм-ауте делаете то, что дёргает ком...

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

код внутри settimeout будет выполнен ДО cd

Глеб-Щукин Автор вопроса
Evgheni Чернявский
код внутри settimeout будет выполнен ДО cd

вот этот момент я не улавливаю. как такое может быть?

Глеб-Щукин Автор вопроса

если cd тут вызывает только само событие setTimeout

Глеб Щукин
если cd тут вызывает только само событие setTimeou...

просто как факт примите, внутренности зоны вам знать не нужно сначала handler потом cd

Глеб-Щукин Автор вопроса
Evgheni Чернявский
просто как факт примите, внутренности зоны вам зна...

ок, приму что если при onPush написать что то вроде setTimeout(() => this.cdr.detectChanges();, то detectChanges вызовится дважды

Глеб Щукин
ок, приму что если при onPush написать что то врод...

А можете рассказать о кейсах странных? Я довольно сложные плееры нагородил, с временем и таймерами точными, и вроде не было нюансов с cd Какого рода задачи вас на такие изучения толкают? Просто понимать спектр задач хочу

Ilya Chursin
лучше бы вообще зону выпилить - это да)))

ну зона то уйдёт, главное народу сказать что халява с текущим дефолтом больше не будет то что щас делается через rxjs + async pipe + onpush, то +- будет выглядеть также через сигналы но уже как ДЕФОЛТ новый

Глеб Щукин
если cd тут вызывает только само событие setTimeou...

cd вызывает фреймворк, после отработки всех хэндлеров. setTimeout и т.п. формируют пул тасок. Они при выполнении что-то делают, состояние меняют. Когда все выполнились и пул пустой, пришло время проверить что поменялось в приложении и отрисовать.

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
Карта сайта