Я использую ng-bind-html
для привязки данных, которые я получаю из базы данных.Угловая JS: обнаружение, если ng-bind-html закончила загрузку, затем выделите синтаксис кода
<p ng-bind-html="myHTML"></p>
app.controller('customersCtrl', function($scope, $http, $stateParams) {
console.log($stateParams.id);
$http.get("api link"+$stateParams.id)
.then(function(response) {
$scope.myHTML = response.data.content;
// this will highlight the code syntax
$('pre code').each(function(i, block) {
hljs.highlightBlock(block);
});
});
});
Когда данные, отображаемые на экране, я хочу, чтобы запустить
$('pre code').each(function(i, block) {
hljs.highlightBlock(block);
});
для подсветки синтаксиса кода в данных, но не выделить. (Я использую highlight library in CKEditor для подсветки синтаксиса кода)
И если я оттянуть загрузить код выделения после 1s, он будет работать, но я думаю, что это не является хорошим решением
setTimeout(function() {
$('pre code').each(function(i, block) {
hljs.highlightBlock(block);
});
}, 1000);
Я думаю, может быть код выделить пробег до ng-bind-html
закончен.
=== UPDATE
Я использую $timeout
со временем задержки 0, как несколько человек рекомендуют. Тем не менее, когда-то, когда сеть работает медленно и медленная загрузка страницы, код не будет выделен.
$scope.myHTML = response.data.content;
$timeout(function() {
$('pre code').each(function(i, block) {
hljs.highlightBlock(block);
});
}, 0);
использование '$ timeout' вместо' setTimeout'; '$ timeout' - это оболочка, которая обеспечивает обработку' $ digest'. вам может даже не понадобиться задержка в 1 секунде в этом случае, просто время, которое требуется для обработки '$ digest'. – Claies
Я хочу знать, сколько времени в этом случае занимает? как его рассчитать? –
вам не нужно его вычислять; '$ timeout' автоматически выдает' $ digest' (который перерисовывает интерфейс), а затем выполняет логику внутри, а не ждет статического количества времени. – Claies