Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度UI路由器:在标题视图上设置自动滚动不会滚动到顶部_Javascript_Angularjs_Angular Ui Router_Autoscroll - Fatal编程技术网

Javascript 角度UI路由器:在标题视图上设置自动滚动不会滚动到顶部

Javascript 角度UI路由器:在标题视图上设置自动滚动不会滚动到顶部,javascript,angularjs,angular-ui-router,autoscroll,Javascript,Angularjs,Angular Ui Router,Autoscroll,TL;DR:使用Angular UI Router,是否可以自动滚动到显示它的模板所属的相同状态的视图 设置 我有一个角度1.4.1应用程序,使用UI路由器0.2.15和角度材质0.10.0 有一个称为网站的父状态和三个子状态:主页、foo和栏 父状态有一个包装器视图,该视图通过index.html中的标记显示。它还有另外两个视图,header@website和footer@website,它通过包装器视图模板显示 三个子状态中的每一个都有一个main视图,该视图通过父状态的wrapper视图

TL;DR:使用Angular UI Router,是否可以自动滚动到显示它的模板所属的相同状态的视图

设置

我有一个角度
1.4.1
应用程序,使用UI路由器
0.2.15
和角度材质
0.10.0

有一个称为
网站的父状态
和三个子状态:
主页
foo

父状态有一个
包装器
视图,该视图通过
index.html
中的
标记显示。它还有另外两个视图,
header@website
footer@website
,它通过
包装器
视图模板显示

三个子状态中的每一个都有一个
main
视图,该视图通过父状态的
wrapper
视图模板显示

我的期望

在父状态的
包装器
视图模板中,当我在
ui视图
标记上为
header@website
view,我希望只要状态发生变化,页面就会滚动到顶部。请参阅的公认答案

发生了什么事

单击页脚中的任何
ui sref
链接时,页面不会滚动到顶部

我尝试过的

如果我将
autoscroll=“true”
放在主视图的
ui视图
标记上,它将按预期工作。然而,这不是我想要的,因为即使从地址栏导航到某个状态,标题也会隐藏在视图中

我所怀疑的

我认为问题与
header@website
是属于
网站
状态的视图,
自动滚动
仅适用于通常显示在当前模板上的视图。换句话说,通常情况下,
标题
视图将通过
index.html
显示,而不是
wrapper.html

问题

我的怀疑是正确的吗?我是否需要重构,或者有没有办法让它保持原样


提前谢谢

尽管我不主张在指令之外进行DOM操作,但一个快速而肮脏的解决方案是在顶级模块定义的
块中添加一个scrollTo方法

.run(function ($window, $rootScope) {

    $rootScope.$on('$viewContentLoaded', function () {

        var interval = setInterval(function () {
            if (document.readyState == "complete") {
                window.scrollTo(0, 0);
                clearInterval(interval);
            }
        }, 1);

    });
})

(从这里借来)


我尝试使用ui router的
$anchorScroll()
方法,但由于链接位于页面底部,因此页面滚动到该位置,因此您实际上没有注意到它在做任何事情。

从内存中,您的假设是正确的。我过去通过CSS在主视图元素上的顶部填充来解决这个问题谢谢,Phil。我只是尝试重构Plunk来测试我的理论,但它仍然不起作用。看看这个例子:谢谢Jaked1…我在研究中也看到了这个解决方案,但我并不热衷于使用它,因为据推测UI路由器的autoscroll属性已经解决了这个问题。我只是想知道我看到的是autoscroll使用该服务时的一个bug,还是我只是做错了什么。