2013-07-08 61 views
10

有沒有什麼方法可以使用AngularJS/Angular-UI在輸入控件中設置焦點?AngularJS/UI - 對話框中的焦點輸入

我看到Angular-UI有一些Jq-UI = focus指令,但是我無法讓它工作。

我有我顯示採用了棱角分明的UI $對話服務,真的想每個對話框上的第一個輸入來獲得關注,一旦它的顯示

+0

你能提供一個jsfiddle嗎? – pasine

+0

您缺少ui-refresh – ProLoser

回答

-5

AngularJS最後一個版本提供ng-focus幾個對話框:http://docs.angularjs.org/api/ng/directive/ngFocus

+0

對我無效,傳入指令watch函數的值只是一個字符串,例如'focusInput'不是focusInput的評估值。有些東西一定是錯的? –

+0

也不適用於我。沒有錯誤拋出,根本沒有任何反應。 – Ade

+4

這是關注領域時的回調。 – jurchiks

0

你是對的,我已經展示瞭如何在DOM元素上調用jQuery本地jQuery.fn.focus()方法的演示,因爲這些都是ui-jq真的。訣竅是讓它在適當的時間多次觸發。

ui-jq已在$timeout中爲您執行該方法,但默認情況下,只有在創建DOM元素時纔會觸發一次。爲了使ui-jq多次點火,只需添加ui-refresh="someExpression"並使用一個表達式即可知道知道將在每次打開模式時改變。如果在模式關閉的情況下它也會反彈,.focus()如果DOM元素不可見,則不會執行任何操作。

因此,對於ui-bootstrap模式,只需在modal="someExpression"內部使用相同的表達式即可設置。

10

結果證明,所有你需要的是這個,如果你用角UI $對話框服務一起使用它:

app.directive('focusMe', function ($timeout) {  
    return {  
     link: function (scope, element, attrs, model) {     
      $timeout(function() { 
       element[0].focus(); 
      }); 
     } 
    }; 
}); 

HTML:

<input type="text" focus-me > 

如說,這是Angular-僅限UI $對話服務。

看到它住在這裏:http://strengthtracker.apphb.com(點擊登錄或註冊,彈出對話框)

+0

如何設置焦點頁腳按鈕..我真的不能這樣做..我需要關閉$ dialog.messageBox如果輸入鍵被按下 – TalentTuner

+0

添加一個

標記周圍的控件+按鈕在您的對話框 –

+0

此鏈接似乎已經死了。 – Katerberg

18

我曾經在我的模板標準autofocus屬性,並宣佈一個簡單的指令,使之成爲被後創建的元素工作頁面加載(就像你的情況下的對話框)。

app.directive('autofocus', function() { 
    return { 
    restrict: 'A', 
    link: function (scope, element) { 
     element[0].focus(); 
    } 
    }; 
}); 
+2

一個美麗的解決方案,我會適應這個在我的代碼! – Mirage

+1

同意。很好的簡單解決方案,效果很好我只是將它添加到ngDialog彈出窗口中,並且它完美地工作。謝謝! – user2233949

+1

諾布在這裏,道歉:什麼'限制:'A''嗎? –