Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular ngb传送带更换起始滑轨_Angular_Slide_Lifecycle_Ng Bootstrap - Fatal编程技术网

Angular ngb传送带更换起始滑轨

Angular ngb传送带更换起始滑轨,angular,slide,lifecycle,ng-bootstrap,Angular,Slide,Lifecycle,Ng Bootstrap,我正在使用Angular 5和ngb旋转木马。转盘在模板上有3个幻灯片,每个幻灯片都有不同的id。我想根据传递给承载幻灯片的组件的数据设置起始幻灯片 我遇到的问题是,如果我使用@ViewChild获取对旋转木马的引用,它在ngoonit钩子上是未定义的,因此我无法在那里执行任何操作。在ngAfterViewInit钩子中未定义它“not”,因此我可以调用select()函数来更改幻灯片,但随后我遇到了“检查后表达式已更改”错误。总之,@ViewChild在ngOnInit时不会返回旋转木马,如果

我正在使用Angular 5和
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