Here is a simplified plunk to illustrate the problemangularjs: Bir yönerge
içinde önceden gizlenmiş giriş elemanı netlik ayarı bunu görselleştirmek önce bazı html kodunu derler bir açısal direktifini aldık. html olarak, scope.isEditShown
true
yalnızca görülebilir hale gelen bir gizlenmiştir giriş vardır:
<input ng-show='isEditShown' type='text' value='{{content.name}}' class='title_edit'/>
scope.titleChange
işlev çağrıldığında giriş görüntülenir. (Bir ng DblClick yönergesi bağlı) Bu fonksiyon sadece scope.isEditShown
doğru ayarlar ve daha önceden scope.input = $("input:text", ae);
olan bağlayıcı işlevi kapsamı depolanan giriş elemanı (ilgili jQuery'nin focus()
yöntemi çağırmak için çalışır: Kısaca
scope.isEditShown = true;
scope.input.focus();
, Bir şey çift tıklandığında önceden gizlenmiş bir girdinin görselleştirilmesini ve anında odaklanmalarını sağlamak istiyorum. Odak odağı kaybettiğinde girdi gizlendiğinden hemen odaklanmak gerekir (kullanıcının giriş içeriğini anında düzenlemesini istiyorum. Kullanıcı tıkladığında, giriş gizlidir.)
Sorun şu ki, giriş öğesi programına odağı veremiyorum. çalışma kolu. Denemeden sonra, scope.isEditShown = true;
yürütüldüğünde, girişin henüz görünmediğini (= açısal js'nin DOM'de gösterilmediğini) ve gizli bir girişe scope.input.focus();
ile odaklamanın hiçbir şey yapmadığını fark ettim. Giriş elemanı nihayet gösterildiğinde, odaklanmamış.
İstediğimi yapmanın açısal yolu nedir? Girişimin gösterildiğinden ve ne zaman etkin bir şekilde focus()
'u arayabileceğime emin olabilir miyim? NOT: girişe odaklama yapmadan önce scope.$apply()
kullanırsam, $apply already in progress
istisnasını alırım. Güvenli bir şekilde başvurursam foucus verilemez. Bakınız the plunkr.
(ps: gerçekten anlamak istiyorum, bu yüzden automagicallylar yapamaz kullanacağım arkadaşı libreries olduğumu benim için)
Bir Düşmek veya jsfiddle kodunuzu koyabilir miyim? – ganaraj
sorunu temsil etmek için yeterli kod ile çok basit bir demo yapmak, '$ timeout' – charlietfl
@ganaraj kullanarak deneyin: sadece bir plunkr ile cevabı düzenledi. – janesconference