Выполнение вызова API из дочерних компонентов в зависимости от размера экрана

#angular #api

Вопрос:

Я хочу отобразить дочерний компонент в родительском компоненте, когда размер экрана меньше или равен 600 пикселей.

Родительский компонент HTML:

 <div class="small-screen">
      <app-child-component> </app-child-component>
 </div>
 

Родительский компонент SCSS

 .small-screen {
      @media screen and (min-width: 600px) {
             display: none;
     }                  
  }
 

И в ngOnInit моего дочернего компонента я сделал вызов API, чтобы получить некоторые данные с сервера.
Но в моем родительском компоненте, когда размер экрана превышает 600 пикселей (или любого размера),
вызывается API дочернего компонента, хотя мой дочерний компонент не виден, когда размер экрана превышает 600 пикселей. Я хочу вызывать API в своем дочернем компоненте только тогда, когда он виден в моем родительском компоненте. Как я могу это сделать?

Ответ №1:

отображение: нет css только скрывает элемент, но он все еще находится в DOM. Вам нужно получить ширину родительского компонента и использовать ее для отображения/скрытия дочернего компонента с помощью *ngIf

В файле parent.component.ts

 public innerWidth: any;
ngOnInit() {
    this.innerWidth = window.innerWidth;
}
 

В parent.component.html

 <app-child-component *ngIf="innerWidth > 600"> </app-child-component>
 

Если вы хотите обновить значение внутренней ширины при изменении размера. Добавьте это в родительский компонент.

 @HostListener('window:resize', ['$event'])
onResize(event) {
    this.innerWidth = window.innerWidth;
}
 

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

1. Проблема не в том, чтобы показывать/скрывать дочерний компонент. Пожалуйста, внимательно прочитайте последний раздел.