Let's try again:
here's a working plunker: http://plnkr.co/edit/RTrdsLY8ONoeDLPYSFJi?p=preview
But the fields are connected each other.
when you look at DOM:
<input class="form-control ng-pristine ng-valid-maxlength ng-valid-minlength ng-valid ng-valid-required" type="text" name="fieldName" ng-model="fieldName" ng-minlength="3" ng-maxlength="20" required="">
^^^^^^^^^^
of course! All have name="fieldName"!
But why!? it should be first_name, last_name and age!
Yes, there's a mistake in formField.html template:
<input class="form-control" type="{{fieldType}}" name="fieldName" ng-model="fieldName" ng-minlength=3 ng-maxlength=20 required/>
^^^^^^^^^^^
So let's change it into {{fieldName}}. And consequently all occurences of form.fieldName... into form.{{fieldName}}.
Well, where's gone red frame?
Let's look at DOM -
<input class="form-control ng-pristine ng-valid-maxlength ng-valid-minlength ng-valid ng-valid-required" type="text" name="first_name" ng-model="fieldName" ng-minlength="3" ng-maxlength="20" required="">
name is ok, but now has-error doesn't work...