Ho una direttiva di convalida denominata valid-number
che viene utilizzata per impostare la validità di un modulo utilizzando $ setValidity - questo funziona correttamente per tutti i valori di testo che digito nella casella di input a cui è applicata la direttiva come un attributo.Convalida modulo iniziale di Angularjs con le direttive
L'HTML è
<form name="numberForm">
<input name="amount" type="text" ng-model="amount" required valid-number /></form>
La direttiva è la seguente
angular.module('test',[]).directive('validNumber',function(){
return{
require: "ngModel",
link: function(scope, elm, attrs, ctrl){
var regex=/\d/;
ctrl.$parsers.unshift(function(viewValue){
var floatValue = parseFloat(viewValue);
if(regex.test(viewValue)){
ctrl.$setValidity('validNumber',true);
}
else{
ctrl.$setValidity('validNumber',false);
}
return viewValue;
});
}
};
});
Tuttavia, vorrei anche come la convalida da attivare e impostare il css per un clsss valida se il valore di ingresso la casella è inizializzata quando la pagina è stata caricata per la prima volta non è valida, ad es. se ho impostato $scope.amount = 'not a number'
, mi sarei aspettato che la casella di input avesse la direttiva applicata, ma nessuna gioia. Affinché lo not a number
sia evidenziato come non valido, devo apportare una modifica al contenuto dell'ingresso, che attiva la direttiva.
Come posso garantire che la direttiva si applichi a qualsiasi sia <input>
inizializzato con?
Un esempio di codice completo è qui;
questo ha funzionato grande. – GrahamB
Davvero un ottimo post e mette in evidenza dettagli importanti come $ parser e $ formattatori che sono difficili da trovare nella documentazione. – Tobias
Basta entrare in convalide complesse convalide e questo post ha salvato il giorno - o ha trasformato un giorno in pochi minuti eh! – bchesley