【问题标题】:How to use multiple ngx-slick-carousel on same page in Angular?如何在Angular的同一页面上使用多个ngx-slick-carousel?
【发布时间】:2020-10-20 10:55:40
【问题描述】:

我在我的页面上使用了光滑的轮播,但它给了我一个错误并且不显示第二个轮播。 slider.component.ts

<div *ngIf="mainSlider">
    <div class="main__slider">
        <ngx-slick-carousel class="carousel" #slickModal="slick-carousel" [config]="slideConfig">
            <div ngxSlickItem *ngFor="let slide of slides" class="slide">
                <div class="main__slide">
                    <div class="main__slide-inner">
                        <img class="main__slide-image" src="/assets/img/{{slide.img}}.svg" alt="">
                        <div class="main__slide-title">
                            Lorem ipsum dolor sit amet.
                        </div>
                        <div class="main__slide-subtitle">
                            Lorem ipsum dolor sit, amet consectetur adipisicing elit. Nulla, odit?
                        </div>
                        <div class="main__slide-button">
                            <div class="main__slide-hint">
                                <img src="assets/img/sandglass.svg" alt="">Lorem ipsum dolor sit amet, consectetur
                                adipisicing elit. Deleniti esse atque eveniet incidunt.
                            </div>
                            <img src="assets/img/icons/dotted-arrow.svg" alt="">
                            <a class="button-blue" href="#">
                                Lorem ipsum dolor sit.
                            </a>
                        </div>
                    </div>
                </div>
            </div>
        </ngx-slick-carousel>
    </div>
    <div class="main__slider-arrows">
        <button class="slick-arrow" (click)="prev()"><img src="assets/img/icons/arrow-slider.svg" alt=""></button>
        <button class="slick-arrow" style="transform: rotateY(180deg);" (click)="next()"><img
                src="assets/img/icons/arrow-slider.svg" alt=""></button>
    </div>
    <div class="main__slider-info">
        <div class="slider-index">
            <span class="current-slide">01</span>/<span class="num-slide">03</span>
        </div>
        <div class="slider-progress">
            <div class="slider-progress__back"></div>
            <span [style.width.%]="progressBarWidth"></span>
        </div>
    </div>
</div>

<div *ngIf="eventsSlider">
    <div class="news-slider-mobile">
        <ngx-slick-carousel class="carousel" #eventsModal="slick-carousel" [config]="slideConfig">
            <div class="events-slider">
                <div class="events-slider__arrows news-arrows active-arrows"></div>
                <div class="events-slider__arrows activity-arrows"></div>
                <div class="events__tabs">
                    <div class="title tab news-tab active">
                        News
                    </div>
                    <div class="switch first-on">
                        <span></span>
                    </div>
                    <div class="title tab activity-tab">
                        Events
                    </div>
                </div>
                <div class="events__tab-content">
                    <div class="news-item tab-item active-tab">
                        <div class="news-slider-mobile">
                            <a *ngFor="let banner of eventsBanners" href="#" class="events__item">
                                <div class="events__item-image">
                                    <img src="assets/img/{{ banner.img }}.png" alt="">
                                </div>
                                <div class="events__item-wrapper">
                                    <div class="date-view">
                                        <div class="date-view__date">
                                            <img src="images/icons/calendar.svg" alt="">${{banner.date}}
                                        </div>
                                        <div class="date-view__view">
                                            <img src="images/icons/eye.svg" alt="">${{banner.views}}
                                        </div>
                                    </div>
                                </div>
                                <div class="events__item-title">
                                    ${{banner.title}}
                                </div>
                                <div class="events__item-text">
                                    ${{banner.description}}
                                </div>
                            </a>
                        </div>
                    </div>
                </div>
            </div>
        </ngx-slick-carousel>
    </div>
</div>

如您所见,我有 mainSlidereventsSlider ,我还尝试为每个流畅的轮播赋予个人 #slickModal 名称(@ViewChild 也在观看自己的模式)。
slider.components。 ts

import { Component, OnInit, ViewChild, Input } from '@angular/core';
import { SlickCarouselComponent } from 'ngx-slick-carousel';

import { eventsBanners } from './banners';

@Component({
  selector: 'app-slider',
  templateUrl: './slider.component.html',
  styleUrls: ['./slider.component.scss']
})
export class SliderComponent implements OnInit {

  @Input() mainSlider: boolean;
  @Input() eventsSlider: boolean;

  @ViewChild('slickModal') slickModal: SlickCarouselComponent;
  @ViewChild('eventsModal') eventsModal: SlickCarouselComponent;
...

我在主页上导入 app-slider
ma​​in-page.component.html

<section class="main">
    <div class="container">
        <div class="main__inner">
            <app-slider mainSlider="true"></app-slider>
        </div>
    </div>
</section>
<section class="events">
    <div class="container">
        <app-slider eventsSlider="true"></app-slider>
    </div>
</section>

在第一个横幅上,我正在更改进度条的宽度,然后创建 next() 函数 slider.component.ts

  next() {
    console.log(this.slickModal) // gives first modal
    console.log(this.eventsModal) // gives undefined
    this.slickModal.slickNext();
  }

这是一个错误

TypeError:无法读取未定义的属性“slickNext”

有人可以帮忙解决这个问题吗?我应该如何在同一页面/文件上使用 2 &lt;ngx-slick-carousel&gt;

【问题讨论】:

    标签: javascript jquery angular carousel slick.js


    【解决方案1】:

    问题是我的第二个滑块的 html 不正确,两个滑块可以工作。据我了解,在ngx-slick-carousel 之后,孩子应该拥有ngxSlickItem

    <div *ngIf="eventsSlider">
    <div class="events-slider">
        <div class="events-slider__arrows news-arrows active-arrows"></div>
        <div class="events-slider__arrows activity-arrows"></div>
        <div class="events__tabs">
            <div class="title tab news-tab active">
                news
            </div>
            <div class="switch first-on">
                <span></span>
            </div>
            <div class="title tab activity-tab">
                events
            </div>
        </div>
        <div class="events__tab-content">
            <div class="news-item tab-item active-tab">
                <div class="news-slider">
                    <ngx-slick-carousel class="carousel" #eventsModal="slick-carousel" [config]="slideConfig">
                        <a ngxSlickItem *ngFor="let banner of eventsBanners" href="#" class="events__item">
                            <div class="events__item-image">
                                <img src="assets/img/{{ banner.img }}.png" alt="">
                            </div>
                            <div class="events__item-wrapper">
                                <div class="date-view">
                                    <div class="date-view__date">
                                        <img src="images/icons/calendar.svg" alt="">{{banner.date}}
                                    </div>
                                    <div class="date-view__view">
                                        <img src="images/icons/eye.svg" alt="">{{banner.views}}
                                    </div>
                                </div>
                            </div>
                            <div class="events__item-title">
                                {{banner.title}}
                            </div>
                            <div class="events__item-text">
                                {{banner.description}}
                            </div>
                        </a>
                    </ngx-slick-carousel>
                </div>
            </div>
        </div>
    </div>
    

    UPD 1

    但我仍然无法处理 next() 函数。函数改变了我的第一个光滑,但也给出了一个错误,它不能 slickNext() of undefined 。他仍然认为他应该对两个模态都使用 slickNext() ,即使我在开始时将它们分开。

    next() {
        this.mainBanner.slickNext(); 
     }
    
      @ViewChild('slickModal') mainBanner: SlickCarouselComponent;
      @ViewChild('eventsModal') eventsModal: SlickCarouselComponent;
    

    TypeError:无法读取未定义的属性“slickNext”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多