Задать вопрос

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

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

Например, у меня есть<pre class="java">code</pre> После полной загрузки страницы вызывается $("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 : 
	"<h3 class='title'>name: {{fileName}}</h3><pre class=\"java\">content: {{fileContent}}</pre>"
    }
});


Пробовал вызывать по условию $last. Функция отрабатывает, добавляет свои классы в блоку<pre>, но после этого не происходит замена "fileContent". Возможно кто-то сталкивался с подобной задачей?
  • Вопрос задан
  • 758 просмотров
Подписаться 4 Оценить 3 комментария
Решения вопроса 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Все просто, делаем подсветку синтаксиса директивой и проблем нет, angular сам все разрулит.
Ответ написан
@Sapphiron532 Автор вопроса
Удалось реализовать следующим способом.

app.directive('onFinishRender', function ($timeout) {
    return {
        restrict: 'A',
        link: function (scope, element, attr) {
            if (scope.$last === true) {
                $timeout(function () {
                    myFunction();
                    });
            }
        }
    }
});


<div class="file" ng-repeat="file in files"	on-finish-render="ngRepeatFinished">
	<file/>
</div>
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
AMar4enko
@AMar4enko
Попробуйте $scope.$applyAsync или $scope.$$postDigest.
Принимают функцию, как аргумент.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы