Angular ngb传送带更换起始滑轨
我正在使用Angular 5和Angular ngb传送带更换起始滑轨,angular,slide,lifecycle,ng-bootstrap,Angular,Slide,Lifecycle,Ng Bootstrap,我正在使用Angular 5和ngb旋转木马。转盘在模板上有3个幻灯片,每个幻灯片都有不同的id。我想根据传递给承载幻灯片的组件的数据设置起始幻灯片 我遇到的问题是,如果我使用@ViewChild获取对旋转木马的引用,它在ngoonit钩子上是未定义的,因此我无法在那里执行任何操作。在ngAfterViewInit钩子中未定义它“not”,因此我可以调用select()函数来更改幻灯片,但随后我遇到了“检查后表达式已更改”错误。总之,@ViewChild在ngOnInit时不会返回旋转木马,如果
ngb旋转木马
。转盘在模板上有3个幻灯片,每个幻灯片都有不同的id。我想根据传递给承载幻灯片的组件的数据设置起始幻灯片
我遇到的问题是,如果我使用@ViewChild
获取对旋转木马的引用,它在ngoonit
钩子上是未定义的,因此我无法在那里执行任何操作。在ngAfterViewInit
钩子中未定义它“not”,因此我可以调用select()
函数来更改幻灯片,但随后我遇到了“检查后表达式已更改”错误。总之,@ViewChild
在ngOnInit
时不会返回旋转木马,如果我在ngAfterViewInit
期间更改了所查看的幻灯片,我会得到更改错误
是否有更好的方法根据传递给组件的数据设置ngb转盘的起始幻灯片?我想我找到了解决办法。考虑到@ViewChild无法及时获得ngOnInit对ngb carousel的引用,并且我必须在ngAfterViewInit钩子中调用select(),然后在SetTimeout调用中包装select调用,如下所示,这将确保当前Javascript VM循环将在不影响视图的情况下完成,然后进行完全合法的变更。有关详细信息,请访问此链接: 下面是有效的代码:
ngAfterViewInit() {
setTimeout(() => {
this.carousel.select('3');
});
}
你能做到吗?事实上,这也很有效,变量可以在ngOnInit中设置(刚刚测试过),这是更好的选择。还有一个问题是,分配给幻灯片的id在文档中显然不是唯一的,这使得对activeId的任何更改都不会发生更改。但是它按照你的建议工作。谢谢。如果您有a*ngFor格式的幻灯片,您可以使用,例如id=“{'slide'+i}}来提供数字id