Angular 等到绑定完成
Angular wait until binding complete
为了在视图初始化完成后滚动到列表的元素,我尝试 getElementById 将放入 DOM 通过 *ngFor" 在进行 HTTP 调用后,
但是 getElementById 总是返回 null 直到我用 3 秒的 setTimeout 包围它,所以它 returns 元素.
所以我正在寻找一个干净的解决方案,以等待到视图的绑定完成,然后再创建 getElementById。
component.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);
}
您可以将该代码移动到 ionViewDidEnter
或 ionViewWillEnter
方法中,这些事件是根据离子生命周期调用的。您可以选择两者中的任何一个,具体取决于您想要滚动效果的时间。
查找有关离子生命周期事件的更多信息here
如果您的用例位于页面的子组件中,那么您不能直接使用 ionic 生命周期事件,而是使用 @ViewChild
访问您的组件方法以使用页面事件调用。
@ViewChild(childComponent) childComponent: ChildComponent;
----------------------
----bunch of code ----
----------------------
ionViewWillEnter() {
this.childComponent.willEnter(); //scroll logic will go inside the willEnter method.
}
更新
如果您正在填充子组件作为对 http 的响应,您可以尝试使用与组件 ngAfterViewInit()
关联的 angular 生命周期事件,然后检查给定的组件索引是否是所需的索引,将其滚动到视图中。
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();
}
}
为了在视图初始化完成后滚动到列表的元素,我尝试 getElementById 将放入 DOM 通过 *ngFor" 在进行 HTTP 调用后,
但是 getElementById 总是返回 null 直到我用 3 秒的 setTimeout 包围它,所以它 returns 元素.
所以我正在寻找一个干净的解决方案,以等待到视图的绑定完成,然后再创建 getElementById。
component.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);
}
您可以将该代码移动到 ionViewDidEnter
或 ionViewWillEnter
方法中,这些事件是根据离子生命周期调用的。您可以选择两者中的任何一个,具体取决于您想要滚动效果的时间。
查找有关离子生命周期事件的更多信息here
如果您的用例位于页面的子组件中,那么您不能直接使用 ionic 生命周期事件,而是使用 @ViewChild
访问您的组件方法以使用页面事件调用。
@ViewChild(childComponent) childComponent: ChildComponent;
----------------------
----bunch of code ----
----------------------
ionViewWillEnter() {
this.childComponent.willEnter(); //scroll logic will go inside the willEnter method.
}
更新
如果您正在填充子组件作为对 http 的响应,您可以尝试使用与组件 ngAfterViewInit()
关联的 angular 生命周期事件,然后检查给定的组件索引是否是所需的索引,将其滚动到视图中。
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();
}
}