Получить ширину и высоту дочернего компонента с применением ngIf

#angular

#angular

Вопрос:

У меня есть родительский компонент с дочерним компонентом, который заполняет себя с помощью NgFor . Родительский элемент определяет свойство childIsVisible = false и привязывает к нему дочерний *ngIf="childIsVisible" элемент, поэтому изначально дочерний элемент не отображается.

Позже я хочу переключиться childIsVisible на true так, чтобы появился дочерний компонент, и я хочу расположить дочерний компонент на основе его ширины.

Моя проблема в том, что в родительском методе, который изменяет видимость, я не могу получить ширину дочернего компонента, потому что он еще не отображается. То, что я хочу, — это какой-то метод переключения видимости, а затем, как только дочерний компонент отображается, получить его ширину и расположить его соответствующим образом.

Я посмотрел на использование AfterContentChecked , но это кажется немного жестким, поскольку оно вызывается практически постоянно.

Надеюсь, это имеет смысл, любые мысли о разных способах подхода к этому были бы замечательными.

Приветствия

Комментарии:

1. если бы вы могли что-то показать в plunker.

2. Я не могу разобраться в plnkr. Пытался что-то настроить, используя шаблон NG2, но все, что я добавляю, похоже, нарушает его, и я не могу понять, как отлаживать все, что я пишу. Хотя у него будет еще одна трещина, я знаю, что довольно бессмысленно пытаться описать это без примеров

Ответ №1:

Возможно [hidden]="!childIsVisible" , это могло бы решить проблему. Он будет представлен в DOM, просто будет невидимым до тех пор, пока childIsVisible не переключится на true . Дайте мне знать ваши результаты!

Комментарии:

1. Это делает свое дело, хотя я буквально только что закончил читать какое-то сообщение в блоге , в котором утверждалось, что это плохая идея и использовать ngIf вместо этого.

2. Просто быстрое решение. Не имеет большого значения, но вы правы, сэр. ngIf это лучшая практика, я думаю, что это может быть как раз для вашей задачи. Дайте мне знать, если вы найдете что-то более элегантное!

3. Это абсолютно правильный ответ, и на данном этапе я за быстрое решение. Я пока остановлюсь на этом с примечанием, чтобы подробнее изучить его позже. Спасибо за вашу помощь