Necesita obtener la altura del documento html (cuerpo), después de que el contenido se cargue desde algún servicio usando AngularJS.

 /* SHOW RECENT POSTS */
  app.controller('RecentPostsController', function ($scope, $http) {

    $http.get("/site/recentpostsjson/" + appname).success(function (data) {
        $scope.posts = data;

        /* HEIGHT FROM THIS IS COMING DEFAULT , NOT WHAT WE GET AFTER DATA 
           LOAD FROM ANGULAR JS */
        var contentHeight = window.document.body.scrollHeight;
        alert(contentHeight);           
    });
});
0
Mohit Verma 3 sep. 2014 a las 16:37

3 respuestas

La mejor respuesta

$ scope. $ apply () fue el truco que ayuda a representar los datos y obtener altura.

  /* SHOW RECENT POSTS */
   app.controller('RecentPostsController', function ($scope, $http) {
    var appname = getAppName();

    $http.get("/site/recentpostsjson/" + appname).success(function (data) {
        $scope.posts = data;
        $scope.$apply();
        /* NOW GET THE HEIGHT */
        alert(window.document.body.clientHeight);         
    });
0
Mohit Verma 3 sep. 2014 a las 14:37

Depende del tipo de vista que intente renderizar, una vista grande requiere más tiempo para renderizarse, por lo tanto, si solo depende de la solicitud $ http que se resolvió, no es confiable. Porque puede tomar un ciclo de digestión adicional para renderizar.

Sin embargo, si tiene ngAnimate en su módulo, puede usar $animate:before, $animate:after o $animate:close para determinar el momento adecuado para ejecutar las devoluciones de llamada correctas.

Referencia https://github.com/angular/angular. js / blob / master / CHANGELOG.md # features-24

0
Daiwei 3 sep. 2014 a las 15:17

Tal vez esta ayuda

app.controller('RecentPostsController', function ($rootScope, $scope, $http) {

   $http.get("/site/recentpostsjson/" + appname).success(function (data) {
       $scope.posts = data;
       $rootScope.$broadcast('contentLoaded')
   });

});

app.directive('contentHeight', ['$timeout', '$rootScope', function($timeout, $rootScope){
    return {
        link: function(scope, elem, attrs){
              $rootScope.$on('contentLoaded', function(){
                  $timeout(function(){elem[0].scrollHeight});            
              })  
        }  
    } 
})
<body ng-app="someApp" content-height><!--All you staff --></body>

¡Debe manipular DOM solo en directivas! PD el servicio de tiempo de espera ejecuta la función de devolución de llamada solo luego se detiene el resumen

Sin tiempo de espera http://jsfiddle.net/zcbzajqL/

1
Benjamin 7 sep. 2014 a las 07:11