В моей проверке формы есть часть проверки сервера. Итак, я должен вернуться из списка серверов с именами полей и строки с ошибкой в каждом из них. Моя идея состояла в том, чтобы написать общее знание кода, чтобы иметь дело со всеми полями, не зная их заранее, обратившись к ним с их именем. это поле, например:Как получить элемент AngularJS по имени?
<!-- 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>
, как вы можете видеть, переменная emailServerError сохраняется на наличие ошибок, которые приходят с сервера валидаций ... У меня есть много полей в моем приложении, и я пытаюсь написать общий код, который будет соответствовать всем полям ...
так это угловой код:
// 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..
}
};
вопрос в комментариях внутри кода ...
Я считаю, что его просто '$ scope.step1Form.email. $ SetValidity' – Fresheyeball
на самом деле вы уже используете этот синтаксис в вашем HTML. В чем проблема? – Fresheyeball
вы правы, если я хочу сделать это жестко запрограммированным, поэтому мне просто нужно сделать $ scope.step1Form.email. $ SetValidity, но мой код не знал названия полей («email» - это динамическое имя .. его может быть «firstname», , «lastname» или что-то еще ...), поэтому мне нужно получить этот элемент ($ scope.step1Form. + «SomeDynamicVariableName»), а затем включить setValidity. ты меня поймаешь? – user3339306