22

I want to use multiple IonicSlides that I added dynamically. But I can't use @viewChild. please suggest a way to resolve this problem.

Template.html :

<div *ngFor="let name of title;let i = index;">
    <ion-slides  id="something" #slides>
        //some code
    </ion-slides>
</div

Component.ts :

  @ViewChild('slides') slides: QueryList<Slides>;

  ....

  ngAfterViewInit(){
        setTimeout(()=>{
              alert(this.slides.toArray()); //this line rise error 
        }, 3000);
  }

Error :

_this.slides.toArray is not a function

raaaay
  • 496
  • 7
  • 14
Mohsen
  • 1,415
  • 1
  • 13
  • 26

2 Answers2

38

Use @ViewChildren instead of @ViewChild , Read More

@ViewChild :

You can use ViewChild to get the first element or the directive matching the selector from the view DOM.

@ViewChildren :

You can use ViewChildren to get the QueryList of elements or directives from the view DOM.

Vivek Doshi
  • 56,649
  • 12
  • 110
  • 122
0

@ViewChild is for for single element or directive. To get get the QueryList of elements or directives from the view DOM, use @ViewChildren

HTML

<div *ngFor="let name of title;let i = index;" #slides>
    <ion-slides  id="something">
        //some code
    </ion-slides>
</div

Component.ts

@ViewChildren("slides") private slides: QueryList<ElementRef>;
  ....

ngAfterViewInit(): void {
    this.slides.changes.subscribe(() => console.log(this.slides));
}
raaaay
  • 496
  • 7
  • 14