Javascript $anchorScroll仅在ng视图加载之后,而不是之前

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);

在ng view div中加载新内容后,我想在页面顶部自动滚动

所以我实现了$anchorScroll,并调用一个函数在页面顶部跳转:

"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标签内,那么单击事件将如何到达按钮?这不是问题。按钮工作,锚工作,路由工作。。。我只是想防止在加载下一页之前跳到顶部。