2013-07-08 2 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

does not работает для меня, значение, переданное в функцию просмотра директивы, является просто строкой, например. «focusInput» не оцененное значение focusInput .. что-то должно быть неправильно? –

+0

Не работает и для меня. Ошибок не возникает, просто ничего не происходит. – Ade

+4

Это обратный вызов, когда поле фокусируется. – jurchiks

0

Вы правы, я показал демонстрации о том, как вы можете называть собственный метод jQuery для элемента DOM, так как это все ui-jq действительно делает. Хитрость заключается в том, что она срабатывает многократно и в нужное время.

ui-jq уже выполняет метод для вас внутри $timeout, однако по умолчанию он запускается только один раз, когда создается элемент DOM. Чтобы сделать огонь ui-jq несколько раз, просто добавьте ui-refresh="someExpression" и используйте выражение, которое вы знаете будет меняться каждый раз, когда модальный открывается. Все в порядке, если он обновляется, когда модальный тоже закрыт, .focus() ничего не сделает, если элемент DOM не отображается.

Итак, для ui-bootstrap modal просто введите то же выражение, которое вы используете внутри 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 > 

как уже говорилось, это для угловое разрешение Только диалоговое окно 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

Noob здесь, извинения: что 'ограничивает: 'A'' делать? –

Смежные вопросы