Arhn - архитектура программирования

AngularJS/UI — ввод фокуса в диалогах

Есть ли способ установить фокус в элементах управления вводом с помощью AngularJS/Angular-UI?

Я видел, что в Angular-UI есть директива Jq-UI=focus, но я не могу заставить ее работать.

У меня есть несколько диалогов, которые я отображаю с помощью службы Angular-UI $dialog, и мне бы очень хотелось, чтобы первый ввод в каждом диалоговом окне получил фокус после его отображения.


  • Можете ли вы предоставить jsfiddle? 08.07.2013
  • Вам не хватает UI-обновления 08.07.2013

Ответы:


1

Я использовал стандартный атрибут autofocus в своем шаблоне и объявил простую директиву, чтобы он работал для элементов, которые создаются после загрузки страницы (например, диалоги в вашем случае).

app.directive('autofocus', function () {
  return {
    restrict: 'A',
    link: function (scope, element) {
      element[0].focus();
    }
  };
});
17.03.2014
  • Согласовано. Хорошее простое решение, которое хорошо работает. Я только что добавил его во всплывающее окно ngDialog, и он отлично сработал. Спасибо! 02.11.2015
  • Нуб здесь, извиняюсь: что делает restrict: 'A'? 04.11.2016
  • @travis-heeter: это означает, что директива будет использоваться как атрибут, а не как элемент. См. docs.angularjs.org/guide/directive#directive-types. 06.11.2016

  • 2

    Оказывается, все, что вам нужно, это если вы используете его вместе с сервисом Angular-ui $dialog:

    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 $dialog.

    Смотрите его здесь: http://strengthtracker.apphb.com (нажмите "Войти" или "Зарегистрироваться", чтобы открыть диалоговые окна)

    09.07.2013
  • Как установить фокус на кнопках нижнего колонтитула.. я действительно не могу этого сделать.. мне нужно закрыть $dialog.messageBox, если нажата клавиша ввода 10.07.2013
  • добавьте тег ‹form› вокруг элементов управления + кнопка в диалоговом окне 10.07.2013
  • Эта ссылка кажется мертвой. 30.04.2014
  • пожалуйста, продолжайте эту ссылку, даже я хочу знать, как добавить фокус на кнопку нижнего колонтитула. Та же проблема, что и Саурабх, спрашивавший выше 27.06.2014
  • fyi также работает с сервисом $modal в Angular, в который $dialog был преобразован в более поздних версиях пользовательского интерфейса Angular. 21.07.2015
  • Зачем нужен $timeout? 23.12.2015

  • 3

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

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

    Итак, для модального окна ui-bootstrap просто поместите то же выражение, которое вы используете, внутри modal="someExpression", и вы должны быть установлены.

    08.07.2013

    4

    Последняя версия AngularJS предлагает ng-focus: http://docs.angularjs.org/api/ng/directive/ngFocus

    08.07.2013
  • у меня не работает, значение, переданное в функцию просмотра директивы, представляет собой просто строку, например. 'focusInput' не оцениваемое значение focusInput .. что-то должно быть не так? 09.07.2013
  • У меня тоже не работает. Ошибок не выдает, просто ничего не происходит. 27.02.2014
  • Это обратный вызов, когда поле сфокусировано. 31.05.2014
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..