我认为我已经确定了一些关于ng-repeat运行时间的奇怪的AngularJS1行为,因此与控制器执行的时间冲突。
我的控制器会自动向下滚动到html锚点ID: $ anchorScroll( 'html_id');
这适用于静态html(static html plunker)
<div id="hello1">Hello1 </div>
但是如果控制器在ng-repeat(ng-repeat plunker)生成的div上调用anchorScroll似乎不起作用
<div id="{{ITEM.slug}}" ng-repeat="ITEM in LIST">{{ITEM.slug}}</div>
注意::使用按钮可以正常使用ng-repeat的anchorScroll,但是我想让它在加载时自动滚动...
(我也试过usig ng-init =来调用滚动函数,但同样的时间问题 - 所以它找不到锚...即使在ng-repeat之后编码)
任何想法/解决方法?
(似乎没有任何ng-repeat事件要绑定到......)
答案 0 :(得分:1)
要使其正常工作,$anchorScroll
必须在摘要周期后执行,以便实际呈现项目。
实现这一目标的最简单方法是使用$timeout
0
秒延迟,这将创建一个将被解决的承诺。在0
延迟时,承诺将在当前摘要周期完成后处理,而不是立即处理。
testApp.controller('testCtrl', function($scope, $anchorScroll, $timeout) {
$scope.LIST = [{
"slug": "hello1"
}, {
"slug": 'hello2'
}, {
"slug": 'hello3'
}];
$timeout(function() {
$anchorScroll('hello3');
}, 0);
});