2014-09-06 6 views
4

Я создаю страницу печати для моего сайта: http://vivule.ee/0/printКак определить, когда загружен контент?

Я хочу начать window.print() при загрузке страницы. Я пробовал разные подходы, но безуспешно. Я знаю, что это возможно, потому что я могу слушать законченные призы Ajax, но как это делается в Angular?

Моя информация Путь: HTML-> угловое разрешение> PHP-> MySQL table-> PHP-> json-> угловое разрешение> HTML

ответ

2

ОК, получил эту работу с помощью обещаний, $ часов, $ таймаута и SetTimeout

О обещаниях: http://andyshora.com/promises-angularjs-explained-as-cartoon.html

О угловом $ часы: How do I use $scope.$watch and $scope.$apply in AngularJS?

Вы можете увидеть это работает вживую здесь: http://vivule.ee/0/print

Вот Зверь, которого я закончил с (проверьте комментарии в коде):

if($routeParams.print){ 

    //Set variable for $watch to listen 
    $scope.game = null; 

    //Start script only after angular has changed content in ng-view 
    $scope.$on('$viewContentLoaded', function(){ 

     //Listen to $scope.game variable change 
     $scope.$watch('game', function(newVal, oldVal){ 

      //Force angular not to fire script on load 
      if(newVal != oldVal) { 

       //Force script to run AFTER ng-repeat has rendered its things to the DOM 
       $timeout(function(){ 

        //And finally setTimout to wait for browser to render the custom fonts for print preview 
        setTimeout(function(){ 

         //Print document 
         window.print(); 
         //window.close(); 
        }, 100); 
       }, 0); 
      } 
     }, true); 
    }); 
} 
3

Вы можете использовать, $ viewContentLoaded Создаваемые каждый раз, когда содержание ngView перезагрузке , Проверьте это [link]: https://docs.angularjs.org/api/ngRoute/directive/ngView Если вы загружаете ngView, это событие вы можете использовать, чтобы убедиться, что представление полностью загружено.

$scope.$on('$viewContentLoaded', function(){ 
    $window.print(); 
    }); 
+0

не 100% надежный, хотя, как он может сгореть, прежде чем все директивы оказали – charlietfl

+0

This пожары, когда «нг-вид» имеет загружен. Мне нужно слушать, когда загрузился контент INSIDE ng-view. Это прямо сейчас создает страницу печати без фактического содержимого из таблицы mysql. – yodalr

0

Когда обещание (Аякс) разрешен, то вы можете установить флаг

Как getApplication.then (функция (ответ) {// сделать некоторые вещи $ scope.isApplicaionLoaded = True; });

и в пользовательском интерфейсе, вы можете использовать флаг как нг-шоу = «isApplicaionLoaded»

+0

Хотя это мне не помогло, идея использования обещаний сделала, поэтому спасибо за предложение. – yodalr

Смежные вопросы