Javascript $anchorScroll仅在ng视图加载之后,而不是之前
在ng view div中加载新内容后,我想在页面顶部自动滚动 所以我实现了$anchorScroll,并调用一个函数在页面顶部跳转:Javascript $anchorScroll仅在ng视图加载之后,而不是之前,javascript,angularjs,Javascript,Angularjs,在ng view div中加载新内容后,我想在页面顶部自动滚动 所以我实现了$anchorScroll,并调用一个函数在页面顶部跳转: "use strict"; angular.module("someApp") .controller("ScrollCtrl", function($scope, $location, $anchorScroll) { $scope.scrollTo = function(id) { $location.hash(id);
"use strict";
angular.module("someApp")
.controller("ScrollCtrl", function($scope, $location, $anchorScroll) {
$scope.scrollTo = function(id) {
$location.hash(id);
$anchorScroll();
}
});
当我点击“下一步”按钮时,我想先加载新页面,然后跳到顶部。但是,对于corse,我点击“a标签”,然后它立即跳到我的锚上:
<a ng-href="#/ropute/to/new/content" ng-click="scrollTo('question_content')" >
如何避免这种情况?因此,您要做的是导航到
/route/to/new/content
,然后自动向下滚动到问题内容
元素
在这种情况下,您当前的方法存在两个问题。首先,您的ng单击将在新视图加载和可见之前触发,因此它不会滚动到元素。第二个问题是Angular已经使用url哈希来存储当前位置(除非在$locationProvider
上调用html5Mode()
)。因此,将位置散列设置为question\u content
不会滚动到具有该id的元素,它会告诉Angular尝试加载question\u content
的路由,我假设您没有
因此,我将您的HTML更改为:
<a ng-href="#/route/to/new/content?scroll_to=question_content">
然后在主体
元素(或ng视图
所在的同一元素)上设置一个指令,该元素侦听$viewContentLoaded
事件,查找滚动至
位置搜索参数,查找该元素,计算其顶部偏移量(通过jQuery)然后将页面滚动到它。这里哪一个是“下一步”按钮?。相同的锚定标签??下一步按钮位于所示的a标签内。在我的例子中,ng href是一个模型,它在整个范围内动态变化。这在这里没关系,我在angularjs方面不强,这是我的疑问。如果按钮位于a标签内,那么单击事件将如何到达按钮?这不是问题。按钮工作,锚工作,路由工作。。。我只是想防止在加载下一页之前跳到顶部。