我正在使用Angular 5和ngb-carousel
。旋转木马在模板上有3个幻灯片,每个幻灯片都有不同的ID。我想根据传递给托管幻灯片的组件的数据设置起始幻灯片。
我遇到的问题是,如果我使用@ViewChild
来获取对旋转木马的引用,它在ngOnOnit
钩子上是未定义的,所以我不能在那里做任何事情。它在ngAfterViewInit
钩子中“未”未定义,因此我可以调用select()
函数来更改幻灯片,但后来我遇到“表达式在检查后发生了变化”。错误。总之,@ViewChild
在ngOnInit
时没有返回旋转木马,如果我改变在ngAfterViewInit
期间观看的幻灯片,我得到更改错误。
是否有更好的方法根据传递给组件的数据设置ngb-carousel的起始幻灯片?
我想我有一个解决方法。鉴于@ViewChild不会及时获得ngbn-carousel对ngOnInit的引用,并且我必须在ngAfterViewInit钩子中调用select(),然后在SetTimeout调用中包装如下所示的select调用将确保当前的Javascript VM循环将在不影响视图的情况下完成,然后进行完全合法的更改。有关此链接的更多信息:
https://blog.angular-university.io/angular-2-what-is-unidirectional-data-flow-development-mode/
这里的代码有效:
ngAfterViewInit(){
setTimeout(() => {
this.carousel.select('3');
});
}