Cevap
$scope.$watch('$viewContentLoaded',
function() {
$timeout(function() {
//do something
},0);
});
test ettiğim çoğu senaryoda çalışan tek model. Tümü bir şablondan HTML oluşturan 4 bileşenli bir örnek sayfada, etkinliklerin sırası
$document ready
$onInit
$postLink
(and these 3 were repeated 3 more times in the same order for the other 3 components)
$viewContentLoaded (repeated 3 more times)
$timeout execution (repeated 3 more times)
Bu yüzden açısal olarak inşa edilen DOM hiçbir yerde hazır olmayabilir, çünkü bir $ document.ready () çoğu durumda işe yaramaz.
Ancak daha ilginç, $ viewContentLoaded tetiklendikten sonra bile, ilgi alanı hala bulunamadı.
Yalnızca $ timeout çalıştırıldıktan sonra bulundu. $ Zaman aşımı değeri 0 olsa da, çalıştırılmadan önce yaklaşık 200 milisaniyenin geçtiğini ve bu iş parçacığının, muhtemelen DOM'un ana iş parçacığına açısal şablonlar eklerken bir süre kapalı tutulduğunu gösterdiğini unutmayın. İlk $ document.ready () ile son $ timeout yürütme arasındaki toplam süre yaklaşık 500 milisaniyeydi.
Bir bileşenin değerinin ayarlandığı ve daha sonra $ zaman aşımına göre text () değerinin değiştirildiği olağanüstü bir durumda, $ zaman aşımı değerinin çalışana kadar artırılması gerekiyordu (öğe $ zaman aşımı sırasında bulunabilse bile) ). 3. taraf bileşenindeki zaman uyumsuz bir şey, değerin, yeterli zaman geçene kadar metin üzerinde önceliğe sahip olmasına neden oldu. Başka bir olasılık ise $ scope. $ EvalAsync, ancak denenmedi.
Hala DOM'un tamamen yerleştiğini ve tüm vakaların çalışması için manipüle edilebileceğini söyleyen bir olayı arıyorum. Şimdiye kadar keyfi bir zaman aşımı değeri gereklidir, yani en iyi ihtimalle bu yavaş bir tarayıcıda çalışmayabilecek bir çamurdur. LiveQuery ve yayınlamak / çalışmak, ama kesinlikle saf açısal değildir abone olmak gibi JQuery seçenekleri denemedim.