鉴于此标记:
<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;
})
这个问题肯定比看上去还多。
进一步调查时,问题可能是ui-router
及其默认autoscroll
行为造成的。我无法解决这个问题。