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

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

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

21 ответов

7 просмотров

Зачем приходится прокидывать компонент дочернему? Дочерний может сам себе его получить через 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
Я бы это сделал так:

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

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

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

А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Добрый день подскажите пожалуйста может кто то сталкивался с ошибками Sentry 22.10.0 развернутым из helm чарт в Kubernetes? Изначально 3 дня назад очень стало много событий ух...
Tire4 Finist Devops
1
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
почому оно не работает?
Vi Chapmann Chapmann
19
Так а кто может спарсить всех участников чата? Идишники
Magic
18
а как ловят такое ghci> res <- getPos2 urlt 0 (alist !! 0) 200 ghci> res SearchAtom (Search "www.google.com" "/search?q=" "Haskell") "haskell.org" (SearchTS [(2024-05-06 07:...
Fedor
14
Есть вопрос: допустим есть железка с каким-то интерфейсом(допустим usb), но как по этому интерфейсу железкой управлять неизвестно, прог нету, а управлять очень хочется надо. К...
Mixail Frolov
15
Карта сайта