angular 2 scrollto行为

时间:2016-07-13 11:40:05

标签: angular angular2-routing

我遵循了角度2教程:路由和导航 - 查询参数https://angular.io/docs/ts/latest/guide/router.html#!#query-parameters

我们的想法是从列表向下钻取到新路线,然后返回到列表中的相同项目。

它适用于他们,因为列表很短而没有滚动。

我有相同的情况,但列表很长。 回到列表屏幕后,我加载并绑定列表,我需要将滚动设置为当前项目(并不总是可见)。 我试过了:

 ngAfterViewChecked() {
        if(this.selectedId)
            this.el.nativeElement.querySelector("[id='7']").scrollIntoView();
    }

(为简单起见,7为硬编码) 实际上,每次在每个钩子上尝试它,并且每次查询选择器返回null。 (在页面加载后,在浏览器控制台上,此行正常工作:...querySelector("[id='7']").scrollIntoView();)

我没有想法,你能想到在绑定列表后完成滚动的其他事情吗?

这里是棱角分明的活动:http://plnkr.co/edit/?p=preview 如果你缩小窗口(获得滚动条)并点击最后一个英雄(rubberMan),你会明白我的意思。 感谢

1 个答案:

答案 0 :(得分:2)

我找到了一个解决方案/解决方法:

ngAfterViewChecked() {
    let timer = Observable.timer(0);
    timer.subscribe(t => {
        if (this.selectedId)
            this.el.nativeElement.querySelector("[id='" + this.selectedId + "']").scrollIntoView();
    });

它接触到零延迟的计时器解决问题