Mi piace molto il modo in cui l'attributo ng-model si collega direttamente al mio modello e gli utenti ottengono un feedback immediato sulle loro modifiche. Per il mio caso d'uso è perfetto. Tuttavia, non voglio che i valori non validi vengano inseriti nel modello in cui possono lanciare una chiave inglese nei calcoli. In qualche modo voglio che il modello venga aggiornato solo se il valore nel controllo del modulo è valido. Per i valori non validi, è normale che il valore del controllo cambi mentre il valore del modello rimane fisso.Non registrare valori non validi con il modello ng
Se cambio la fonte di angolare (1.2rc) implementazione di NgModelController $ setViewValue:
this.$setViewValue = function(value) {
...
if (this.$modelValue !== value) {
this.$modelValue = value;
...
}
};
A tal:
this.$setViewValue = function(value) {
...
if (this.$modelValue !== value && this.$valid) {
this.$modelValue = value;
...
}
};
Sembra di fare esattamente quello che voglio, ma I don' So come farlo in modo corretto. Qual è il modo giusto per cambiare questo comportamento? Oppure i miei tentativi sono destinati all'insuccesso per qualche motivo?
Aggiornamento: Aggiunto esempio.
Per esempio guardo http://jsfiddle.net/FJvgK/1/ HTML:
<div ng-controller="MyCtrl">
{{validNumber}}
<form>
<input
type="number"
ng-model="validNumber"
required
min="10"
max="20"
/>
</form>
</div>
E il JS:
var myApp = angular.module('myApp',[]);
function MyCtrl($scope) {
$scope.validNumber = 15;
}
Il numero indica correttamente per valori compresi tra 10 e 20, ma voglio in modo che se improvvisamente digitare '8' nella casella o eliminare la seconda cifra lasciando '1' l'ultimo numero valido mostra ancora sopra. Cioè, il modello ha sempre un valore valido, anche se il controllo no.
sì, mi spiace, ho aggiunto un esempio. Non voglio che il campo diventi nullo, voglio che mantenga un valore valido. –
Avevi ragione. Non cambia il modello, ma semplicemente non mostra valori di modello non validi altrove nell'interfaccia utente che non mi aspettavo/volevo. –