gpt4 book ai didi

Angular 等待绑定(bind)完成

转载 作者:行者123 更新时间:2023-12-04 17:33:37 24 4
gpt4 key购买 nike

为了在 View 初始化完成后滚动到列表的元素,我试图getElementById 将由“* ngFor"在进行 HTTP 调用后,

但是 getElementById 总是返回 null 直到我用 3 秒的 setTimeout 包围它,所以它返回元素。

因此,我正在寻找一个干净的解决方案,以便在创建 getElementById 之前等待到 View 的绑定(bind)完成。

组件.ts:

  InitDisponibilites(disponibilites) {
this.disponibilites = Array();
for (let disponibilite of disponibilites) {
this.addDisponibilite(disponibilite);
}

setTimeout(()=>{

let index = this.getElementIndexToScroll();
let el = document.getElementById('dispo' + index) as HTMLElement;
el.scrollIntoView();

},3000);

}

最佳答案

您可以将该代码移动到 ionViewDidEnterionViewWillEnter 方法中,这些事件是根据 ionic 生命周期调用的。您可以选择两者中的任何一个,具体取决于您想要滚动效果的时间。

查找有关 ionic 生命周期事件的更多信息 here

如果您的用例位于页面的子组件中,那么您不能直接使用 ionic 生命周期事件,而是使用 @ViewChild 来访问要通过页面事件调用的组件方法。

@ViewChild(childComponent) childComponent: ChildComponent;
----------------------
----bunch of code ----
----------------------
ionViewWillEnter() {
this.childComponent.willEnter(); //scroll logic will go inside the willEnter method.
}

更新
如果您正在填充子组件作为对 http 的响应,您可以尝试使用与组件关联的 Angular 生命周期事件 ngAfterViewInit(),然后检查给定的组件索引是否是所需的索引,将其滚动到 View 中.

childcomponent.html

<div #rootDiv [selected]="index === getElementIndexToScroll()"></div>

childcomponent.ts

export class ChildComponent implements AfterViewInit {
@ViewChild('rootDiv') rootElement: ElementRef;
@Input() selected: boolean;

ngAfterViewInit() {
if (this.selected) {
this.rootElement.nativeElement.scrollIntoView();
}
}

关于Angular 等待绑定(bind)完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57630082/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com