2012-06-21 8 views
9

Ho una pagina AngularJS con diversi input di modulo.AngularJS, come faccio a rendere l'interfaccia utente dipendente da quale campo è attivo?

Quando alcuni degli input sono focalizzati, desidero modificare altri aspetti arbitrari della pagina.

Ad esempio, quando l'utente è nell'input del codice "stock", desidero visualizzare l'elenco di codici azionari popolari. Quando sono nel campo 'qty' voglio mostrare le quantità e i tempi di consegna.

C'è una variabile che contiene l'input "corrente" (quello che ha lo stato attivo), o devo tornare a onFocus di jQuery. (Sembra un po 'primitivo ora.)

risposta

10

Che ne dici di fare una direttiva? È possibile impostare una variabile ogni volta che l'utente lascia/entra l'input, e rilevare che: http://jsfiddle.net/TZnj2/

Assicurarsi di leggere la guida direttiva se siete confusi su cosa sta succedendo: http://docs.angularjs.org/guide/directive

Anche io uso portata. applicare $ a tale direttiva, ecco una spiegazione di ciò che fa: http://docs.angularjs.org/api/ng.$rootScope.Scope#$apply

+0

Così tanto Angular JS sembra elegante, ma questo sembra un sacco di codice per raggiungere questo obiettivo - hanno dimenticato le direttive ngFocus e ngBlur? –

+2

Quindi vuoi elegante Prova questo, quindi MrGreen: http://jsfiddle.net/andytjoslin/3Aevb/1/. E Angular non voleva scrivere direttive per tutto, credo. ng-click e ng-dblclick ecc sono solo direttive, no. Niente di speciale. –

+0

Solo la mia opinione, ma penso ancora che jQuery legga meglio in questo particolare caso di sfocatura/messa a fuoco (ho sovrascritto questo usando un oggetto, potrei farla franca con meno codice se fosse in linea) http://jsfiddle.net/gregk/r2336/ –

8

ngFocus e ngBlur sono direttive built-in:

<input ng-focus="hasFocus = true" ng-blur="hasFocus = false" type="text"> 
<p ng-show="hasFocus">The field has focus!!</p> 

Try demo on jsfiddle

Problemi correlati