ngb轮播更改开始幻灯片

时间:2019-01-10 00:20:35

标签: angular slide lifecycle ng-bootstrap

我正在使用Angular 5和src/config/server.ts。轮播在模板上有3张幻灯片,每张幻灯片都有不同的ID。我想根据传递给承载幻灯片的组件的数据来设置起始幻灯片。

我遇到的问题是,如果我使用ngb-carousel来获取对轮播的引用,那么它在@ViewChild钩子上是未定义的,因此我无法在其中执行任何操作。在ngOnOnit钩子中它不是“未定义”的,因此我可以调用ngAfterViewInit函数来更改幻灯片,但随后我遇到“检查表达式后更改了表达式”。错误。总之,select()@ViewChild时不返回轮播,如果我更改在ngOnInit期间查看的幻灯片,则会收到更改错误。

是否有更好的方法根据传递到组件的数据为ngb-carousel设置起始幻灯片?

1 个答案:

答案 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');
    });

}