Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AngularJs event to call after content is loaded

People also ask

What is $viewContentLoaded?

$viewContentLoaded is fired as soon as the ui-view has the template compiled, and the controller has been executed. The dom may change at the next $digest in response to something that happened in the controller, or whatever. There is no good mechanism to replicate document.

What is ngInit?

The ngInit directive allows you to evaluate an expression in the current scope. This directive can be abused to add unnecessary amounts of logic into your templates. There are only a few appropriate uses of ngInit : aliasing special properties of ngRepeat , as seen in the demo below.

What is Ng load?

ng-load is implementation of javascript's on-load event in angular js. You may wish to use callback function on DOM is loaded same like onload event in javascript. ng-load will provide custom callback once DOM is loaded. Implementation of OnLoad event of javascript in Angular JS.


According to documentation of $viewContentLoaded, it supposed to work

Emitted every time the ngView content is reloaded.

$viewContentLoaded event is emitted that means to receive this event you need a parent controller like

<div ng-controller="MainCtrl">
  <div ng-view></div>
</div>

From MainCtrl you can listen the event

  $scope.$on('$viewContentLoaded', function(){
    //Here your view content is fully loaded !!
  });

Check the Demo


Angular < 1.6.X

angular.element(document).ready(function () {
    console.log('page loading completed');
});

Angular >= 1.6.X

angular.element(function () {
    console.log('page loading completed');
});

fixed - 2015.06.09

Use a directive and the angular element ready method like so:

js

.directive( 'elemReady', function( $parse ) {
   return {
       restrict: 'A',
       link: function( $scope, elem, attrs ) {    
          elem.ready(function(){
            $scope.$apply(function(){
                var func = $parse(attrs.elemReady);
                func($scope);
            })
          })
       }
    }
})

html

<div elem-ready="someMethod()"></div>

or for those using controller-as syntax...

<div elem-ready="vm.someMethod()"></div>

The benefit of this is that you can be as broad or granular w/ your UI as you like and you are removing DOM logic from your controllers. I would argue this is the recommended Angular way.

You may need to prioritize this directive in case you have other directives operating on the same node.


You can directly call it by adding {{YourFunction()}} after HTML element.

Here is a Plunker Link.