In meiner Formularvalidierung gibt es einen Teil der Servervalidierungen. Also sollte ich von der Serverliste mit den Namen der Felder und einer Zeichenfolge mit dem Fehler in jedem von ihnen zurückkommen. Meine Idee war, ein allgemeines Code-Wissen zu schreiben, um mit allen Feldern umzugehen, ohne sie vorher zu kennen, indem ich mit ihrem Namen auf sie zugreife. dies Feld zum Beispiel:Wie erhalten Sie AngularJS-Element nach Name?
<!-- Email -->
<div class="form-group" data-ng-class="{ 'has-error' : step1Form.email.$invalid && (!step1Form.email.$pristine || submitted) }">
<label>Email</label>
<input type="email" name="email" class="form-control" data-ng-model="user.email" required data-ng-minlength="5" data-ng-maxlength="60">
<p data-ng-show="step1Form.email.$error.required && (!step1Form.email.$pristine || submitted)" class="help-block">required!</p>
<p data-ng-show="step1Form.email.$error.minlength" class="help-block">too short1</p>
<p data-ng-show="step1Form.email.$error.maxlength" class="help-block">too long!</p>
<p data-ng-show="step1Form.email.$error.email" class="help-block">invalid email!</p>
<p data-ng-show="step1Form.email.$error.serverError" class="help-block">{{emailServerError}}</p>
</div>
wie Sie sehen können, die Variable emailServerError auf Fehler gespeichert, die von den Server-Validierungen kommen ... Ich habe viele Felder in meiner Anwendung und ich versuche, Generika zu schreiben Code, der für alle Felder passen ...
so ist dies der Winkel Code:
// function to submit the form after all validation has occurred
$scope.submitForm = function() {
// check to make sure the form is completely valid
if ($scope.step1Form.$valid) {
// now we will go to server side validation
// AJAX calls.......
// lets say we got this back:
var problem = { field: 'email', msg: 'this email is already registered'};
// now we need to setValidity for email input.
var errorVariableName = $parse(problem.field + 'ServerError'); // Get the name of the error string variable.
errorVariableName.assign($scope, problem.msg); // Assigns a value to it
console.log($scope.emailServerError); // = 'this email is already registered'
// HERE THE PROBLEM:
// now i need to do something like that:
// $scope.step1Form. + problem.field + .$setValidity('serverError', false);
// but i dont know how to this that.
// i think that i need to get this element ($scope.step1Form. + problem.field) in some way by name, and then use setValidity on it. but i dont know how..
}
};
ist die Frage in den Kommentaren in den Code ...
Ich glaube, nur '$ scope.step1Form.email. SetValidity' $ – Fresheyeball
Sie verwenden diese Syntax tatsächlich bereits in Ihrem html. Was ist das Problem genau? – Fresheyeball
Sie richtig, wenn ich es hardcoded machen will, so muss ich nur tun $ scope.step1Form.email. $ SetValidity, aber mein Code kannte nicht die Felder Name ("E-Mail" ist dynamischer Name .. es kann "Vorname" sein , "Nachname" oder was auch immer ...), also muss ich dieses Element ($ scope.step1Form. + 'SomeDynamicVariableName') holen und dann setValidity darauf setzen. holst du mich? – user3339306