$ anchorScroll到异步绑定的元素id

时间:2014-09-02 19:50:12

标签: javascript angularjs anchor-scroll

鉴于此标记:

<li ng-repeat="i in items" ng-attr-id="id-{{i}}">{{i}}</li>

注入$anchorScroll(以便实例化)将导致窗口滚动到绑定的id(如果它与url中的哈希匹配),因此/#id-4将在加载时滚动到。

.controller('myCtrl', function($scope, $location, $timeout, $anchorScroll) {
  $scope.items = [1,2,3,4];
})

出乎意料的是,如果异步加载$scope绑定,$anchorScroll无法在任何时候通过调用$anchorScroll()自动或手动工作,即使在我可以验证id已经设置好了。这令我感到困惑。

Demo here (comment in/out the initial $scope binding).

这是我想出的,但似乎应该有一种更自然的方式使用$anchorScroll。事实上,它适用于演示,但非常奇怪的是我的工作不起作用 项目

.directive('anchorScrollToId', function($location) {

  var directive = {
    link: function($scope, $element, $attrs) {
      if ($location.hash() === $attrs.id) {
        $element[0].scrollIntoView();
      }
    }
  };

  return directive;

})

My directive demo here.

这个问题肯定比看上去还多。

更新

进一步调查时,问题可能是ui-router及其默认autoscroll行为造成的。我无法解决这个问题。

0 个答案:

没有答案