超时后执行滚动可以解决问题。因为在您尝试滚动时视图不会更新。
解决方案1:
使用
AfterViewChecked
钩
export class HelloComponent implements AfterViewInit, AfterViewChecked {
added:boolean;
...
add() {
this.axes.push(Array(1));
this.added = true;
}
ngAfterViewChecked() {
// run only when new axe is added
if(this.added) {
const el: HTMLDivElement = this.commentDetailWrapper.nativeElement;
el.scrollTop = el.scrollHeight;
this.added = false;
}
}
...
}
解决方案2:
使用
setTimeout
,则,
...
add() {
this.axes.push(Array(1));
const el: HTMLDivElement = this.commentDetailWrapper.nativeElement;
setTimeout(() => {
el.scrollTop = el.scrollHeight;
});
}
...
解决方案1a:
分离组件并使输入数据不可变。习惯于
ChangeDetectionStrategy.OnPush
用于实施
https://stackblitz.com/edit/angular-2zjf4a