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

Подскажите, может кто знает как решить проблему... Есть у меня div

блок, у которого мне надо получить ширину через реф (nativeElement.offsetWidth). По идее это я должен делать в ngAfterViewInit. Но проблема в том, что только после прихода данных из сервера в этом блоке отображаются карточки и он приобретает свою реальную ширину. А до этого он пустой и я в итоге получаю ширину пустого блока, вместо полной((

Помогает вынести nativeElement.offsetWidth в ngAfterViewChecked, но это не решение, так как данный хук реагирует на каждый чих и вряд ли подходит...

Вопрос. Как получить ширину элемента уже только после того, как с бека придут данные?

13 ответов

4 просмотра

Если я правильно понял, у вас есть два тригера: 1. Данные с серва попали в компонент 2. Данные из пункта 1. попали в темплейти и отрисовались Использовать их для получения ширины после отрисовки

Oleksandr 🤖- Автор вопроса
Volodimir Shkil
Если я правильно понял, у вас есть два тригера: 1....

ну получается что да, тригер должен быть - когда пришли данные и попали в темплейт. А в ngAfterViewInit ширину меряет еще до того, как пришли эти данные.

Oleksandr 🤖
ну получается что да, тригер должен быть - когда п...

Так, ngAfterViewInit, происходит до того как данные попали в темплейт (в вашем случае), есть еще хук, отрабатывающий не 1 раз, а каждый раз после изменений View. Помойму это ngAfterViewChecked

Oleksandr 🤖- Автор вопроса
Volodimir Shkil
Так, ngAfterViewInit, происходит до того как данн...

как я и написал, то ngAfterViewChecked решает проблему) но он реагирует на каждое движение, что тоже излишне... Пока я его и оставил.

Oleksandr 🤖
как я и написал, то ngAfterViewChecked решает проб...

Костыль - после получения данных воткнуть таймаут и в нем посмотреть ширину

Oleksandr 🤖- Автор вопроса
Oleg Safonov
Костыль - после получения данных воткнуть таймаут ...

я думал, как вариант, но мне по рукам за такое все равно дадут при ревью кода

Oleksandr 🤖
как я и написал, то ngAfterViewChecked решает проб...

Лучше всего сделать данные через rxjs, subject например, подписаться, проверить ширину, отписаться

Oleksandr 🤖- Автор вопроса
Volodimir Shkil
Лучше всего сделать данные через rxjs, subject нап...

тоже в голове думал о какой-то подписке, но пока не достаточно опыта, чтобы реализовать))

Oleksandr 🤖
тоже в голове думал о какой-то подписке, но пока н...

Самое время изучить, потом может быть лень. Конструкция будет максимально простая ;)

Oleksandr 🤖
я думал, как вариант, но мне по рукам за такое все...

А может обернуть содержимое в ещё один блок, который будет с ngIf и отображаться только когда данные есть? Тогда afterviewinit на вложенный блок должен нормально работать

Oleksandr 🤖- Автор вопроса
Oleg Safonov
А может обернуть содержимое в ещё один блок, котор...

о... это интересное решение. Я просто думал, что будет underfined если блока нет. А может хук сработает повторно после отображения блока? Тогда попробую ща

Oleksandr 🤖
о... это интересное решение. Я просто думал, что б...

Нужно afterViewInit во вложенном только делать)

Oleksandr 🤖- Автор вопроса
Oleg Safonov
Нужно afterViewInit во вложенном только делать)

ок, хотя я думал обойтись без вложенного)

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

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

а через 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
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
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
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта