angularjs - wait for angular app to be fully rendered from phantom script -
i'm writing script generates png images every page of frontend. i'm using angular ui , capturing pages phantom.
the view take while until angular finish rendering have wait a little before capturing:
var page = require('webpage').create(); page.open('http://localhost:9000/', function () { window.settimeout(function () { page.render('snapshot.png'); phantom.exit(); }, 2000); }); i wonder if there better way achieve this. found angular can emit event when page rendered:
$scope.$on('$viewcontentloaded', function () { // }); and found way communicate phantom oncallback write like:
$scope.$on('$viewcontentloaded', function () { window.callphantom({ hello: 'world' }); }); then in other place in phantom script:
page.oncallback = function() { page.render('snapshot.png'); phantom.exit(); }; but i'm lost in how inject angular $viewcontentloaded handle phantom script.
i don't know if evaluate/evalueateasyn way go ...
page.evaluateasync(function () { $scope.$on('$viewcontentloaded', function () { window.callphantom({ hello: 'world' }); }); }); maybe access right $scope in way. ideas?
the associated phantomjs api oncallback; can find api doc on wiki.
// in angular $scope.$on('$viewcontentloaded', function () { window.callphantom(); }); // in phantomjs script var page = require('webpage').create(); page.oncallback = function() { page.render('snapshot.png'); phantom.exit(); }; page.open('http://localhost:9000/'); you can access $rootscope accessing injector; example, if you're using ng-app directive, can find element directive , call .injector().get("$rootscope") on it. however, i'm not sure if $viewcontentloaded event have fired then.
Comments
Post a Comment