angular - ngb-carousel 更改起始幻灯片
问题描述
我正在使用 Angular 5 和ngb-carousel
. 轮播在模板上有 3 张幻灯片,每张幻灯片都有不同的 id。我想根据传递给承载幻灯片的组件的数据设置起始幻灯片。
我遇到的问题是,如果我曾经@ViewChild
获得对轮播的引用,它在ngOnOnit
钩子上是未定义的,所以我不能在那里做任何事情。ngAfterViewInit
它在钩子中是“未”未定义的,所以我可以调用该select()
函数来更改幻灯片,但是我遇到了“检查后表达式已更改”。错误。总之,@ViewChild
在 时不返回轮播ngOnInit
,如果我更改期间查看的幻灯片,ngAfterViewInit
我会收到更改错误。
是否有更好的方法根据传递给组件的数据设置 ngb-carousel 的起始幻灯片?
解决方案
我想我有一个解决方法。鉴于@ViewChild 不会及时为 ngOnInit 获得 ngb-carousel 的引用,并且我必须在 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');
});
}
推荐阅读
- go - 附加到作为空接口传递的 golang 切片
- arrays - 如何在 Bash 中创建一个前导零的数组?
- python - 串行到并行到串行数据处理的模式
- windows - 如何将 CMD 批处理命令的输出的特定部分设置为变量?或者,只是回应它?
- laravel - Laravel 关系空
- mysql - 错误 列数与第 1 行的值计数不匹配 遗漏了一些东西
- python - 如何在没有布尔逻辑错误的情况下创建 Pandas 新列?
- javascript - 使用 ES6 模块从命令行(Node JS)在脚本中运行函数
- assembly - 我怎样才能打印“你好世界!” 不使用数据段?
- python - 设置一些常用的全局依赖 Python