我正在使用Angular 5和src/config/server.ts
。轮播在模板上有3张幻灯片,每张幻灯片都有不同的ID。我想根据传递给承载幻灯片的组件的数据来设置起始幻灯片。
我遇到的问题是,如果我使用ngb-carousel
来获取对轮播的引用,那么它在@ViewChild
钩子上是未定义的,因此我无法在其中执行任何操作。在ngOnOnit
钩子中它不是“未定义”的,因此我可以调用ngAfterViewInit
函数来更改幻灯片,但随后我遇到“检查表达式后更改了表达式”。错误。总之,select()
在@ViewChild
时不返回轮播,如果我更改在ngOnInit
期间查看的幻灯片,则会收到更改错误。
是否有更好的方法根据传递到组件的数据为ngb-carousel设置起始幻灯片?
答案 0 :(得分:0)
我认为我有一种解决方法。鉴于@ViewChild不会及时为ngOnInit引用ngb-carousel,并且我必须在ngAfterViewInit挂钩中调用select(),然后将如下所示的select调用包装在SetTimeout调用中,以确保当前的Javascript VM周期将结束而不会影响视图,然后进行更改,这是完全合法的。有关此链接的更多信息:
https://blog.angular-university.io/angular-2-what-is-unidirectional-data-flow-development-mode/
以下代码有效:
ngAfterViewInit(){
setTimeout(() => {
this.carousel.select('3');
});
}