[英]How to differentiate between auto-slide and click slide Bootstrap carousel?
[英]Bootstrap Carousel does not auto-slide when routing back in angular?
问题是当我启动我的 angular 应用程序时,使用引导轮播的图像 slider 工作正常。 但是当我路由到另一个视图并返回到图像 slider 视图时,它不是自动滑动的,我也可以使用下一个和上一个按钮来更改图像,但它不是自动滑动的。 它仅在我重新加载页面时才有效。 如何解决这个问题?
这是我的代码
.html文件
<div id="myCarousel" class="carousel slide carousel-fade" data-bs-ride="carousel" data-bs-pause="false">
<!-- CAROUSEL INDICATORS -->
<div class="carousel-indicators">
<div *ngFor="let image of images;index as i;first as isFirst" [class.active]="isFirst">
<button type="button" data-bs-target="#myCarousel" [attr.data-bs-slide-to]="i" aria-current="true">
</button>
</div>
</div>
<!-- CAROUSEL IMAGES -->
<div class="carousel-inner">
<div class="carousel-item active" data-bs-interval="2000" *ngFor="let image of images;first as isFirst" [class.active]="isFirst">
<img id="carouselImage" src="{{image}}" class="d-block w-100" height="707vh" alt="">
<div class="carousel-caption d-none d-md-block">
<h3>It Differentiates Your Brand From Others</h3>
<p>Kajah Industrial is The leading Industrial In The Country.</p>
<button class="btn" (click)="btnService()">Watch Our Services</button>
</div>
</div>
</div>
<!-- NEXT AND PREV BUTTON -->
<button class="carousel-control-prev" type="button" data-bs-target="#myCarousel" data-bs-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="visually-hidden">Previous</span>
</button>
<button class="carousel-control-next" type="button" data-bs-target="#myCarousel" data-bs-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="visually-hidden">Next</span>
</button>
</div>
.ts 文件
import { bootstrap } from 'bootstrap';
...
ngOnInit() {
var myCarousel = document.querySelector('#myCarousel')
var carousel = new bootstrap.Carousel(myCarousel)
}
angular.json文件
"styles": [
"node_modules/bootstrap/dist/css/bootstrap.min.css",
"node_modules/font-awesome/css/font-awesome.min.css",
"./node_modules/aos/dist/aos.css",
"src/styles.css"
],
"scripts": ["./node_modules/jquery/dist/jquery.min.js",
"./node_modules/popper.js/dist/umd/popper.min.js",
"./node_modules/bootstrap/dist/js/bootstrap.min.js",
"./node_modules/aos/dist/aos.js"
]
而且我在控制台中发现了这个错误
*错误类型错误:无法读取 HomeComponent.ngOnInit 未定义的属性“轮播”*
有几件事需要考虑。 您可以添加declare var $: any;
在.ts
文件中的import
语句下。 这将允许您访问jQuery
中的 jQuery,它由引导轮播使用。
您不应尝试在ngOnInit
方法中初始化轮播,而应使用ngAfterContentInit
。 ngOnInit
在视图呈现之前触发,因此您的查询选择器找不到该组件,因为 Angular 尚未将其添加到 DOM。
您可以在此处阅读有关 Angular 生命周期挂钩的信息。
ngAfterContentInit
在 Angular 将外部内容投影到组件的视图或指令所在的视图后响应。
ngAfterContentInit() {
const myCarousel = document.querySelector('#myCarousel');
const carousel = $(myCarousel).carousel();
}
此外,您应该使用ViewChild
来引用控件,而不是使用document.querySelector
作为 Angular 访问 DOM 元素的首选方式。
declare var $: any;
ViewChild('carousel', { static: false }) private _carousel: ElementRef;
ngAfterContentInit() {
const myCarousel = this._carousel.nativeElement;
const carousel = $(myCarousel).carousel();
}
在您的 html 添加#carousel
<div #carousel id="myCarousel" class="carousel slide carousel-fade"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.