6

В моей проверке формы есть часть проверки сервера. Итак, я должен вернуться из списка серверов с именами полей и строки с ошибкой в ​​каждом из них. Моя идея состояла в том, чтобы написать общее знание кода, чтобы иметь дело со всеми полями, не зная их заранее, обратившись к ним с их именем. это поле, например:Как получить элемент 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.. 
    }  
}; 

вопрос в комментариях внутри кода ...

+2

Я считаю, что его просто '$ scope.step1Form.email. $ SetValidity' – Fresheyeball

+0

на самом деле вы уже используете этот синтаксис в вашем HTML. В чем проблема? – Fresheyeball

+0

вы правы, если я хочу сделать это жестко запрограммированным, поэтому мне просто нужно сделать $ scope.step1Form.email. $ SetValidity, но мой код не знал названия полей («email» - это динамическое имя .. его может быть «firstname», , «lastname» или что-то еще ...), поэтому мне нужно получить этот элемент ($ scope.step1Form. + «SomeDynamicVariableName»), а затем включить setValidity. ты меня поймаешь? – user3339306

ответ

3

Вы можете попробовать

$scope.step1Form 

, а затем получить доступ к правильному значению с

$scope.step1Form["nameOfProblemfield"] 
Смежные вопросы