2015-04-29 8 views
10

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

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

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

ответ

9

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/

+3

заменить setTimeout на $ timeout будет иметь смысл –

+3

Согласен. Я также не вижу здесь $ docment, поэтому его не нужно вводить. –

1

В моем случае, ответ Travis Collins не работает, потому что каким-то образом, элемент был массив входов ,

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

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