Страницы

Поиск по вопросам

среда, 5 июня 2019 г.

Как вызвать функцию после отрисовки ng-repeat?

Здравствуйте. Пишу одностраничное приложение на angularjs, где по клику по ссылке с помощью ajax получаю данные с сервера. Полученные данные выводятся с помощью ng-repeat. Проблема в том, что я использую скрипты для подсветки кода в html и для того, чтобы эта подсветка появилась, необходимо вызвать функцию, которая и обновляет эти стили.
Например, у меня есть

code
После полной загрузки страницы вызывается $("pre.java").snippet("java"), но если попробовать вызвать ее после получения ответа по ajax, то она вызывается именно после получения, а не отрисовки на странице. Моя директива:
app.directive("file", function() { return { restrict : "E", scope : true, controller : function($scope, $element) { $scope.fileName = $scope.file.fileName; $scope.fileContent = $scope.file.content; },
link : function(scope, el, attr) { scope.fileName = scope.fileName; scope.fileContent = scope.fileContent; }, template : "

name: {{fileName}}

content: {{fileContent}}
" } });
Пробовал вызывать по условию $last. Функция отрабатывает, добавляет свои классы в блоку
, но после этого не происходит замена fileContent. Возможно кто-то сталкивался с подобной задачей?
    


Ответ

Примерно следующее должно Вам помочь:
Директива:
app.directive('onFinishRender', function ($timeout) { return { restrict: 'A', link: function (scope, element, attr) { if (scope.$last === true) { $timeout(function () { scope.$emit('ngRepeatFinished'); }); } } } });
HTML

{{item.name}}}

Если необходимо получить доступ к событию из контроллера:
$scope.$on('ngRepeatFinished', function(ngRepeatFinishedEvent) { //... });

Комментариев нет:

Отправить комментарий