Мне пришлось заняться этим вопросом несколько недель go, и вот что я придумал.
<div class="date-box-container" #container>
<div class="date-box" *ngFor="let day of days" #dayElement>
<div>{{day}}</div>
</div>
</div>
Вы можете получить #container
div и #dayElement
div в вашем классе компонентов соответственно с @ViewChild()
и @ViewChildren()
.
Я решил использовать зависимость resize-наблюдающий-polyfill для наблюдения за каждым изменением размера в вашем container
div. Просто добавьте этот бит кода в метод ngAfterViewInit()
, чтобы быть уверенным, что ваш DOM уже загружен.
(не забудьте добавить overflow: hidden;
в ваш контейнерный div, чтобы сделать предстоящие вычисления)
const ro = new ResizeObserver((entries, observer) => {
for (const entry of entries) {
// Here you must call you computation method that I'll describe later
}
});
ro.observe(this.container);
Тогда вам нужно только довольно простое вычисление, используя родительский div offsetWidth
и сумму их дочерних ширин, чтобы скрыть элементы, которые должны быть скрыты, сохраняя логическое свойство в day
объект и *ngIf="day.visible"
в вашем шаблоне.
Я надеюсь, что мое объяснение было достаточно ясным, если вы застряли, не стесняйтесь поделиться рабочей демонстрацией, показывающей ваши проблемы!