1

Я думаю, что я определил некоторое нечетное поведение AngularJS1 относительно времени выполнения ng-repeat и, следовательно, противоречит срокам выполнения контроллера.anchorScroll не выполняется в контроллере с ng-repeat?

Мой контроллер автоматически прокручивается до ссылки на html anchor ID: $ anchorScroll ('html_id');

Это прекрасно работает со статическим HTML (static html plunker)

<div id="hello1">Hello1 </div>

Но anchorScroll не кажется, что будет работать, если он называется контроллером на дивы, генерируемых нг-повтора (ng-repeat plunker)

<div id="{{ITEM.slug}}" ng-repeat="ITEM in LIST">{{ITEM.slug}}</div>

Примечание :: anchorScroll на нг-повторе отлично работает с кнопки, но я хочу, чтобы прокрутить автоматически ON НАГРУЗКИ ...

(я также попытался usig нг-Init = вызвать функцию прокрутки, но такая же проблема синхронизации - поэтому он не может найти якорь ... даже если кодируется ПОСЛЕ ng-repeat)

Любые идеи/обходные пути?

(там не кажется, что любые нг-повтор события связываются с ...)

ответ

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

https://plnkr.co/edit/53hlGNig7eozlm1vqkQL?p=preview

+0

Ты звезда! Хорошее чистое решение - именно то, что я искал - Спасибо :) – Corvin

Смежные вопросы