Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Angular validate form with dynamic name

Typically to validate a form in Angular, I would use something like this on the ng-submit directive:

<form name="formName" ng-submit="formName.$valid && submitForm()"></form>

This works great when the form has a name that I set myself while building the form. However, in my current situation, I am trying to create multiple forms based on a list of objects. In this case, each form has a name that is determined on the fly.

When the user submits one of these forms, how can I validate it before running the submitForm() function for that form?

Here's a jsfiddle of the simplified problem: http://jsfiddle.net/flyingL123/ub6wLewc/1/

My question is, how can I access the name of the form in order to validate it? Here is the code from the fiddle:

var app = angular.module('app', []);

app.controller("AppController", ['$scope', function($scope) {
  $scope.forms = [{
    id: 1,
    value: "val1"
  }, {
    id: 2,
    value: "val2"
  }, {
    id: 3,
    value: "val3"
  }];

  $scope.submitForm = function() {
    alert('submitted');
  }
}]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.1/angular.min.js"></script>
<div id="app" ng-app="app" ng-controller="AppController">
  <div class="formWrapper" ng-repeat="form in forms">
    <form name="{{ 'form' + form.id }}" ng-submit="submitForm()" novalidate>
      <input ng-model="form.value" required />
      <button type="submit">Submit</button>
    </form>
  </div>
</div>
like image 932
flyingL123 Avatar asked Sep 30 '14 19:09

flyingL123


People also ask

Which method is used to add dynamic validation to the forms in angular?

Dynamically Add Validators We need to listen to optionB value changes and based on that we add or remove the validators we require. We also call the control's updateValueAndValidity() method, as we need to recalculate the value and validation status of the control.

How do I add custom validators dynamically in reactive form?

We can add Validators dynamically using the SetValidators or SetAsyncValidators. This method is available to FormControl, FormGroup & FormArray. There are many use cases where it is required to add/remove validators dynamically to a FormControl or FormGroup.

What is dynamic validation?

Dynamic Validation validates Snap properties as you enter them. SnapLogic starts validating a property as you edit it; a preview of the result of this validation is displayed and updated as you continue editing.


1 Answers

You can always use this to access the scope in your templates.

{{this.foo === foo}} <!-- This will always show "true" -->

Therefore, you can simply use this[myDynamicFormName] to access the form:

<form name="{{'form' + form.id}}" ng-submit="this['form' + form.id].$valid && submitForm()"></form>
like image 123
Blackhole Avatar answered Oct 22 '22 03:10

Blackhole