我们有以下场景:
有一个容器可以有 x 个输入元素 (x >= 0) 每个输入元素都使用普通的 ng-binds
在容器中有一个函数可以为每个包含的 ngModelController 添加一个 $parsers 和 $validators。
代码如下:
<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>
在“form-element”指令的链接方法中,我们这样调用: 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);
}
}
这在 AngularJS 1.4.x 下运行良好
在 AngularJS 1.5.x 中,它只有在输入指令中的模板直接通过 template: '...' 定义时才有效。如果我们使用 templateUrl: '...' 我们现在会遇到 ngModel 未定义的问题。在 controls[i] 中,我得到了正确的元素,并且有一个 ng-model 属性,但 AngularJS 1.5 似乎还没有编译该元素。
有没有更好的方法来操作子元素的 ngModels?