We have the following scenario:
there is an container which can have x input elements (x >= 0) Each input element use normal ng-binds
In the container there is an function which adds an $parsers and $validators to each included ngModelController.
the code is the following:
<form-element>
<fs-input-a ng-required="true" ng-model="model.streetname" name="streetname"></fs-input-a>
<fs-input-b ng-required="true" ng-maxlength="5" ng-pattern="/\d$/" ng-model="model.streetnr" name="streetnr"></fs-input-b>
</form-element>
In the link method of the "form-element" directive we call something like this: var controls = element[0].querySelectorAll('[ng-model]'), i, ngModel;
// Get all ngModel controllers
if (controls.length) {
for (i = 0; i < controls.length; i++) {
ngModel = angular.element(controls[i]).controller('ngModel');
ngModel.$parsers.push(function(value) {
...
}.bind(ngModel));
ngModel.$validators.removeHidden = function() {
// on validation remove the hideError flag
this.$hideError = undefined;
return true;
}.bind(ngModel);
}
}
This worked fine under AngularJS 1.4.x
In AngularJS 1.5.x it works only if the template in the input directives it directly defined via template: '...' If we use templateUrl: '...' we have now the problem that ngModel will be undefined. In the controls[i] I get the right element and there is a ng-model attribute but it seems that AngularJS 1.5 haven't compiled the element.
Is there a better way to manipulate the ngModels of the child elements?