Angular Routes / входной автофокус

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

Я новичок в Angular и не уверен, что понимаю то, что читал о ngFocus:

https://docs.angularjs.org/api/ng/directive/ngFocus


person odran037    schedule 29.04.2015    source источник


Ответы (2)


ngFocus — это не то, что вы ищете. Эта директива больше похожа на триггер события. Он будет выполнять ваш код всякий раз, когда пользователь фокусируется на текстовом поле.

То, что вы хотите, это что-то вроде этой пользовательской директивы:

angular
    .module('myApp')
    .directive('autofocus', function($timeout) {
        return {
            link: function(scope, element, attrs) {
                $timeout(function() {
                    element.focus();
                });
            }
        }
    });

На основе http://ericclemmons.com/angular/angular-autofocus-directive/

person Travis Collins    schedule 29.04.2015
comment
заменить setTimeout на $timeout будет больше смысла - person Pankaj Parkar; 29.04.2015
comment
Согласен. Я также не вижу, чтобы здесь использовался $docment, поэтому его не нужно вводить. - person Travis Collins; 29.04.2015

В моем случае ответ Трэвиса Коллинза не сработал, потому что каким-то образом элемент представлял собой массив входных данных.

Поэтому я должен использовать слегка модифицированную версию. Обратите внимание, со стрелочными функциями.

.directive('autofocus', ($timeout) => ({
    link: (scope, element: any, attrs) => {
        if (!element.focus && element.length) {
            element = element[0];
        }
        $timeout(() => {
            element.focus();
        });
    }
}));
person stefku    schedule 21.04.2017