在我“显示”它之后,我试图滚动到页面上的一个元素。IE 我有一个很长的用户列表,我将它们显示为一个列表。每个元素都有一个可以单击的编辑图标。单击时,我会显示页面顶部的用户表单。然后我想滚动到那个位置。
// helper method to scroll
$scope.scrollTo = function (id) {
$location.hash(id);
$anchorScroll();
}
在编辑用户点击:
$scope.editUser = function (user) {
$scope.user = user; // set user
$scope.setShowUserForm(true); // show edit form
$scope.scrollTo('admin-form'); // scroll to the form
}
这很好用,除了第一次。我检查了 DOM,我的“用户表单”元素在 DOM 中但被隐藏了,这就是我想要的。当我第一次单击编辑用户时,滚动不起作用。第一次失败后一切都很好。我不确定发生了什么变化。
我还将表单设置为默认显示,这样我就知道它在 DOM 中并且在我第一次单击编辑时可见。那也没有解决我的问题。因此,无论它是否在 DOM 中,是否隐藏第一次滚动都会失败。
知道我做错了什么吗?
编辑:
我想我知道发生了什么,但我不知道如何解决它。我在我的应用程序中使用路由。我有这样的路线:
/#/主 /#/管理员
我正在使用滚动到它的管理页面导致问题。这是我要滚动到的 html:
<div id="admin-form">
...
</div>
问题是当我使用 Angular 滚动时,它会将我的网址更改为:
/#/admin#admin-form
什么时候它似乎击中了路由控制器并重新加载了我的管理页面,这就是滚动没有发生的原因。一旦我在 /#/admin#admin-form url 上,滚动就可以工作,因为 angular 看不到我的路线发生变化并且不会重新加载页面。但是,如果我将我的 url 更改回 /#/admin 并单击执行滚动到 angular 的按钮再次将 url 更改为 /#/admin#admin-form。
我确信这是预期的,但我不知道如何解决它。或者如果我可以。