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

Ребята, привет. Может кто подсказать по ошибке NG0100. Получаю элемент

через ViewChild со static:false, далее его передаю через инпут в дочерний компонент. Получается на ngAfterViewInit инпут имеет свойство сначала null, потом элемент из viewChild и поэтому ошибка NG0100. Как от нее уходить? Если запускать вручную detectChanges() ошибка уходит, но нормальное ли это решение?
Можно static: true проставить, тогда тоже ошибка уйдет. Но это тоже как костыль выглядит. Если передать в input сразу шаблонную переменную #elem, то тоже ошибки нет и не пойму почему.

21 ответов

19 просмотров

Зачем приходится прокидывать компонент дочернему? Дочерний может сам себе его получить через DI..

Alexandr-Manyunin Автор вопроса
Svyatoslav Miller
Зачем приходится прокидывать компонент дочернему? ...

Дочернему компоненту нужен не сам компонент, а определенный div. Вопрос именно как правильно его передать? Получается тут реально свойства сначала не было, а при повторной проверке появилось

Alexandr-Manyunin Автор вопроса
Svyatoslav Miller
дочерний компонент является потомком div?

Да, но необязательно. И почему если передать не свойство из ViewChild, а сам элемент #element то ошибки нет?

Alexandr Manyunin
Дочернему компоненту нужен не сам компонент, а опр...

Ну так родительский вы можете через конструктор вполне получить, а у него уже объявить нужный метод, позволяющий вам этот div получить

Alexandr-Manyunin Автор вопроса
Svyatoslav Miller
потому что #element доступен до onInit

#element это viewChild со static:true получается?

Alexandr-Manyunin Автор вопроса
Iworb
Ну так родительский вы можете через конструктор вп...

Это да, но если не родительский например. Хочется именно причину ошибки понять и как уйти.

Alexandr Manyunin
#element это viewChild со static:true получается?

не могу точно ответить на этот вопрос (

Alexandr Manyunin
Дочернему компоненту нужен не сам компонент, а опр...

Если ваш дочерний компонент является потомком этого div, вы можете сделать директиву, и инжектить её в дочернем компоненте. Пример: @Directive({ selector: '[parentDiv]', standalone: true, }) export class ParentDivDirective { readonly element = inject(ElementRef<HTMLDivElement>); } Далее в дочернем компоненте делать так: class Component { readonly parentDivDirective = inject(ParentDivDirective); } ну и обращаться к элементу через this.parentDivDirective.element.nativeElement.

Alexandr-Manyunin Автор вопроса
Svyatoslav Miller
не могу точно ответить на этот вопрос (

От ошибки NG0100 можно уйти, если ngAfterViewInit в отдельно свойство myElement положить значение из ViewChild и вручную запустить .detectChanges. Angular ещё раз пересчитает свойства и при повторном пересчете значения будут совпадать. Это костыль или нет)?

Alexandr-Manyunin Автор вопроса
Svyatoslav Miller
Если ваш дочерний компонент является потомком этог...

Это да, тут понятно. Но по идее я просто получаю div через viewChild и отдаю это свойство в инпут, в итоге ошибка) Вроде обычную простую вещь делаю

Alexandr Manyunin
От ошибки NG0100 можно уйти, если ngAfterViewInit ...

Вы просто заново дёргаете проверку изменений. Да, получается костыль. Желательно стараться делать так, чтобы такая ошибка не возникала вообще. То есть избегать изменения состояния во время проверки изменения состояния.

Alexandr-Manyunin Автор вопроса
Svyatoslav Miller
Вы просто заново дёргаете проверку изменений. Да, ...

А viewChild со static:true костыль? в этом случае viewChild будет сразу элемент содержать и ошибки не возникнет

Alexandr Manyunin
А viewChild со static:true костыль? в этом случае ...

ViewChild со static: true не костыль. Но прокидывать родительский элемент в дочерний всё таки похоже на костыль.

Alexandr-Manyunin Автор вопроса
Svyatoslav Miller
ViewChild со static: true не костыль. Но прокидыва...

Понял, спасибо. Но вот не понял почему костыль прокидывать родителя дочернему элементу. Есть дропдаун, которому нужно передать элемент к которому он привязывается и рассчитывается его позиция, передача реализована через Input

Alexandr Manyunin
Понял, спасибо. Но вот не понял почему костыль про...

посмотри @angular/cdk/overlay, вероятно ты изобретаешь велосипед со своим дропдауном

Alexandr-Manyunin Автор вопроса
Глеб Щукин
посмотри @angular/cdk/overlay, вероятно ты изобрет...

Ок, спасибо гляну. Но я велосипед изобретаю, чтобы лучше понять как работает все)

Я бы это сделал так:

Alexandr-Manyunin Автор вопроса
Svyatoslav Miller
Я бы это сделал так:

Инжектить получается элемент к которому цепляться, верно?

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
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
Карта сайта