Wait for $scope to really apply changes in html

I'm having a problem trying to detect when the $scope variable really affect the html. I need to access to the element after the $scope really apply the changes to the html, but the $scope.$watch is not doing the trick.

JS:

$scope.variable = "<p id='myElement'>Hello world!</p>"; console.log(jQuery('#myElement')[0]); 

HTML:

<div ng-bind-html="varible | trustAsHtml"></div> 

The problem is that, even if the $scope is applying the new content, the element still doesn't exist and jQuery returns undefined, so i need to wait untill the $scope really apply the changes to the html.

I know that a solution could be the $timeout but it's not really reliable, there is something that could help me?

1

1 Answer

Dunno why you need jQuery - there is probably an easier way with angular but there you go: angular has private method called $$postDigest, since all the DOM and model changes happens during $digest cycle it should do what you want, the other method would be to use $timeout, I've made working plunker for you

$scope.htmlvar = $sce.trustAsHtml('<strong>Test</strong>'); $timeout(function () { console.log('timeout', jQuery('strong').text()) }, 0, false) //false to not run another digest $scope.$$postDigest(function () { console.log('postDigest', jQuery('strong').text()) }) 
4

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like