2013-07-12 14 views
7

Ho 2 caselle di testo, una richiesta e l'altra non richiesta.Comportamento strano di angolare con TextBox richiesto

Se aggiungiamo il testo nella casella di testo richiesto, dire "ABC", quindi rimuovere il contenuto, il ng-model è impostato su undefined

Se a questo aggiungiamo il testo al campo non richiesto e rimuovere il contenuto, il ng-model non vuotare la stringa "".

Ecco un pasticcio sul comportamento che ho spiegato sopra. Si prega di utilizzare la console per guardare il risultato.

http://plnkr.co/edit/XgQBfcyRF3OwG1qC0gXb?p=preview

Perché c'è una differenza di impostazione del ng-model tra i due?

+0

Ho provato con v1.0.1, v1.0.7 e v1.1.5. Tutti hanno lo stesso comportamento – Abilash

+3

Per impostazione predefinita, il valore di un input vuoto è una stringa vuota. Guardando attraverso la fonte, l'attributo richiesto si aggancia alla convalida di angular, che forse restituisce una nuova proprietà non valida del modello che non è definita. Buona domanda. Spero tu abbia una risposta vera! – rGil

+0

Sì, sembra che questo è di progettazione. – Diryboy

risposta

2

E è sembra essere dal design, e ha a che fare con un comportamento coerente di valori forma convalidati.

Non c'è nulla su questo comportamento nella documentazione, per quanto ne so .. è implicito qui ->https://github.com/angular/angular.js/blob/master/src/ng/directive/input.js#L1045

Con la convalida angularJS, se è consentito un valore immesso sul campo, che diventa il valore del modello (come qualsiasi altro valore associato si comporterebbe). Se non lo è, l'unico modo per essere coerenti è impostare il valore come non definito (poiché nessun valore consentito è nel campo). Le altre due opzioni consistono nel mantenere l'ultimo valore valido o nel mantenere il valore errato, attivando solo i flag per il campo non valido e la forma. Entrambe queste soluzioni sono cattive: l'ultimo valore probabilmente non è voluto (se si utilizzassero i valori ignorando lo stato del modulo, si verificherebbero errori) e consentire valori non validi è un peccato terribile;) (non si poteva t fidatevi del servizio di validazione per prevenire l'uso errato di tipi errati)

Sebbene possa sembrare strano o addirittura incoerente, in realtà non lo è. Ho leggermente modificato il tuo plunkr per convalidare un numero, che credo chiarisca il motivo per cui è così: http://plnkr.co/edit/9gJmblUn9MUUeFt5lWJZ?p=preview.

Quindi, in realtà non c'è differenza: solo nel secondo input una stringa vuota viene considerata un valore valido e accettato per quel campo.