2015-04-29 18 views
10

Uso la rotta angolare. Ogni pagina (percorso) ha un campo di input. Ho usato con successo l'attributo autofocus sulla prima pagina. Quando navigo verso le altre pagine, l'input non esegue la messa a fuoco automatica. Ritornare alla prima pagina non rende nuovamente automatico l'input. Capisco ora perché non funziona, ma vorrei sapere se c'è un modo per farlo.Percorsi angolari/immissione della messa a fuoco automatica

Sono nuovo di angolare e io non sono sicuro di aver capito quello che ho letto su ngFocus:

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

risposta

9

ngFocus non è quello che stai cercando. Quella direttiva è più di un evento innescato. Eseguirà il tuo codice ogni volta che l'utente si focalizzerà sulla casella di testo.

Quello che vogliamo è qualcosa di simile a questa direttiva personalizzato:

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

Ispirato http://ericclemmons.com/angular/angular-autofocus-directive/

+3

sostituire setTimeout a $ timeout avrebbe più senso –

+3

Accetto. Inoltre, non vedo l'uso di $ docment qui, quindi non ha bisogno di essere iniettato. –

1

Nel mio caso, la risposta di Travis Collins non ha funzionato perché in qualche modo, l'elemento è stato una serie di ingressi .

Quindi devo usare la versione leggermente modificata. Nota, con le funzioni freccia.

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