我们需要创建模板引用为slide
的模板.
然后我们可以拿ContentChildren
分,通过内容投影获得所有幻灯片
获得幻灯片后,关键是使用属性为ngbSlide
的ng-template
作为NGB-Carousel,以将其识别为幻灯片
我们可以使用@for
在幻灯片中循环,并使用ngTemplateOutlet
在ng-template
中呈现它们
下面的工作示例
父html
@if (images) {
<my-carousel>
<ng-template #slide>
<div class="picsum-img-wrapper">
<img [src]="images[0]" alt="Random first slide" />
</div>
<div class="carousel-caption">
<h3>First slide label</h3>
<p>Nulla vitae elit libero, a pharetra augue mollis interdum.</p>
</div>
</ng-template>
<ng-template #slide>
<div class="picsum-img-wrapper">
<img [src]="images[1]" alt="Random second slide" />
</div>
<div class="carousel-caption">
<h3>Second slide label</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
</div>
</ng-template>
<ng-template #slide>
<div class="picsum-img-wrapper">
<img [src]="images[2]" alt="Random third slide" />
</div>
<div class="carousel-caption">
<h3>Third slide label</h3>
<p>Praesent commodo cursus magna, vel scelerisque nisl consectetur.</p>
</div>
</ng-template>
</my-carousel>
}
父TS
import { Component } from '@angular/core';
import { NgbCarouselModule } from '@ng-bootstrap/ng-bootstrap';
import { MyCarouselComponent } from './my-carousel/my-carousel.component';
@Component({
selector: 'ngbd-carousel-basic',
standalone: true,
imports: [NgbCarouselModule, MyCarouselComponent],
templateUrl: './carousel-basic.html',
})
export class NgbdCarouselBasic {
images = [944, 1011, 984].map((n) => `https://picsum.photos/id/${n}/900/500`);
}
我的 carousel
import { CommonModule } from '@angular/common';
import {
Component,
ContentChildren,
OnInit,
QueryList,
TemplateRef,
} from '@angular/core';
import { NgbCarouselModule } from '@ng-bootstrap/ng-bootstrap';
@Component({
selector: 'my-carousel',
template: `
<div class="my-carousel">
<ngb-carousel>
@for(slide of slides; track slide; let i = $index) {
<ng-template ngbSlide >
<ng-template
[ngTemplateOutlet]="slide"></ng-template>
</ng-template>
}
</ngb-carousel>
<div>Some text here</div>
</div>
`,
standalone: true,
imports: [NgbCarouselModule, CommonModule],
})
export class MyCarouselComponent implements OnInit {
@ContentChildren('slide', { read: TemplateRef }) slides: QueryList<
TemplateRef<any>
>;
constructor() {}
ngOnInit() {}
ngAfterContentInit() {
console.log(this.slides);
}
}
stackblitz个