2013-09-04 31 views
11

Önyüzümün her sayfasından png görüntüleri üreten bir komut dosyası yazıyorum. Kullanıcı arabirimi için açısal kullanıyorum ve sayfaları hayali ile yakalarım. açısal bitirmek bunu render kadarAçısal uygulamanın phantom komut dosyasından tam olarak oluşturulmasını bekleyin

görünümü yüzden yakalamadan önce biraz beklemek zorunda bir süre alabilir:

var page = require('webpage').create(); 
page.open('http://localhost:9000/', function() { 
    window.setTimeout(function() { 
    page.render('snapshot.png'); 
    phantom.exit(); 
    }, 2000); 
}); 

Bunu başarmak için daha iyi bir yolu olup olmadığını merak ediyorum.

$scope.$on('$viewContentLoaded', function() { 
    // do something 
}); 

Ve bu yüzden böyle bir şey yazabilirsiniz onCallback ile hayalet iletişim için bir yol buldu:

başka yerde Sonra
$scope.$on('$viewContentLoaded', function() { 
    window.callPhantom({ hello: 'world' }); 
}); 

sayfa tamamen işlendiğinde ben bir olay yayabilir açısal bulundu fantom komut dosyası:

page.onCallback = function() { 
    page.render('snapshot.png'); 
    phantom.exit(); 
}; 

Ama hayalet komut dosyasından açısal $viewContentLoaded kolu nasıl enjekte kayboldum.

evaluate/evalueateAsyn gitmek için yol olup olmadığını bilmiyorum ...

page.evaluateAsync(function() { 
    $scope.$on('$viewContentLoaded', function() { 
    window.callPhantom({ hello: 'world' }); 
    }); 
}); 

Belki bir şekilde hakkını $scope erişebilir. Herhangi bir fikrin var mı?

cevap

9

İlişkili PhantomJS API'si onCallback; find the API doc on the wiki yapabilirsiniz.

Sen enjektör erişerek $rootScope erişebilirsiniz
// in angular 
$scope.$on('$viewContentLoaded', function() { 
    window.callPhantom(); 
}); 

// in the phantomjs script 
var page = require('webpage').create(); 
page.onCallback = function() { 
    page.render('snapshot.png'); 
    phantom.exit(); 
}; 
page.open('http://localhost:9000/'); 

; Örneğin, ng-app yönergesini kullanıyorsanız, öğeyi yönerge ile bulabilir ve üzerinde .injector().get("$rootScope") numaralı telefonu arayabilirsiniz. Ancak, $viewContentLoaded etkinliğinin o zamana kadar tetiklenmiş olup olmadığından emin değilim.

+0

Sorum, ön uç kaynağında test bağımlılıklarını karıştırmak istemediğimden, phantom komut dosyasındaki açısal kodun enjekte edilmesiyle ilgilidir –

+0

@ PauFracés Görüyorum; Biraz daha fazla bilgi ile güncelledim - umarım yardımcı olur. –

+0

"Öğeyi yönerge ile bulabilir ve" Üzgünüm, ama nasıl yapılacağını bilmiyorum. –

İlgili konular