Here is a simplified plunk to illustrate the problemangularjs:一個先前隱藏的輸入元件上設置焦點的指令
內部我得到的角指令,可視化之前編譯一些HTML代碼。在HTML中,有變得可見只有scope.isEditShown
是true
的隱伏輸入:
<input ng-show='isEditShown' type='text' value='{{content.name}}' class='title_edit'/>
調用該函數scope.titleChange
時,出現輸入。該功能(結合到NG-DBLCLICK指令)只是設置真實scope.isEditShown
並試圖調用jQuery的focus()
方法的輸入元件(先前存儲在範圍在連接功能與scope.input = $("input:text", ae);
上:
scope.isEditShown = true;
scope.input.focus();
總之,我想要在雙擊某個事物時直觀地顯示一個先前隱藏的輸入,並且立即給予焦點,因爲當輸入失去焦點時隱藏輸入(我希望用戶立即能夠編輯輸入內容。當用戶點擊時,輸入被隱藏)
問題是,它似乎我不能把重點放在輸入元素programm atically。 經過試驗後,我發現當scope.isEditShown = true;
被執行時,輸入還不可見(=角度js沒有在DOM中顯示它),並且將焦點設置爲scope.input.focus();
而隱藏輸入什麼也不做。當輸入元素最終顯示時,它沒有重點。
什麼是做我想要的角度方式?我什麼時候可以確定顯示了我的輸入以及何時可以有效地打電話給focus()
?注意:如果在使用scope.$apply()
之前注重輸入,我會得到$apply already in progress
例外。如果我做了一個安全的申請,將不會給予foucus。請參閱the plunkr。
(PS:我真的想了解,所以我不打算用同伴libreries是自動的爲我做的)
你可以把你的代碼放在plunk或jsfiddle中嗎? – ganaraj 2013-03-25 11:41:04
只用足夠的代碼來表示問題就可以做一個非常簡單的演示,嘗試使用'$ timeout' – charlietfl 2013-03-25 12:42:25
@ganaraj:用plunkr編輯答案。 – janesconference 2013-03-25 14:57:09