Проанализировав это некоторое время, я нашел решение, которое, как мне кажется, подойдет вам.
Что вам необходимо принять во внимание, так это то, что не прослушивает изменения в ширина экрана .
Это означает, что значение itemsPerSlide
установлено на методе ngInit
и никогда не обновляется снова (так как оно не требовалось в вашем вопросе). Когда вы загружаете страницу устройством с разрешением менее 480 пикселей, на слайдере показывается одно изображение, а если оно больше, оно показывает 3.
. Вы можете изменить точку останова, изменив значение в приватном свойстве mobileBreakpoint
.
Давайте посмотрим, как будет выглядеть ваш пример:
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-testimonials',
templateUrl: './testimonials.component.html',
styleUrls: ['./testimonials.component.scss']
})
export class TestimonialsComponent implements OnInit {
itemsPerSlide = 3;
singleSlideOffset = false;
noWrap = false;
slidesChangeMessage = '';
private innerWidth: number;
private mobileBreakpoint = 480;
constructor() { }
ngOnInit(): void {
this.adjustsItemsPerSlide();
}
private adjustsItemsPerSlide() {
this.innerWidth = window.innerWidth;
if (this.innerWidth < this.mobileBreakpoint) {
this.itemsPerSlide = 1;
} else {
this.itemsPerSlide = 3;
}
}
}
private innerWidth: number;
содержит текущую ширину области просмотра. Используйте, чтобы решить, какое число itemsPerSlide
будет использоваться. private mobileBreakpoint = 480;
содержит точку останова, в которой мы будем использовать 3 или 1 слайд. private adjustsItemsPerSlide
: этот метод будет считывать текущую ширину области просмотра и применять различные значения к this.itemsPerSlide
.
. Я также создаю пример для stackblitz , который показывает желаемый эффект.
PS : если вы используете универсальный, это не сработает, и вам нужно будет внедрить windowsService вместо использования объекта windows (который является собственным объектом windows браузера, а не angular сервисом) прямо в компоненте.
Надеюсь, это поможет:)