我正在尝试创建一个指令,当一个控件的值发生更改时,该指令可用于重置组中多个输入控件的验证状态.组由
HTML中指令集的属性标识.
例如: – 当用户更改其中一个控件输入值时,From Date和To Date输入都会重置有效性状态
例如: – 当用户更改其中一个控件输入值时,From Date和To Date输入都会重置有效性状态
这就是我到目前为止所拥有的
JS /角
angular.module('myModule').directive('groupedInputs',function () { return { restrict: 'A',require: '?ngModel',link: function (scope,element,attrs,ctrl) { element.on('change',function () { // Resetting own validity scope.$apply(ctrl.$setValidity('server',true)); // Here I need to set the validity of the controls which // have the `GroupedInputs` directive with the // same attribute value }); } }; });
HTML
<input name="FromDate" type="date" class="form-control" ng-model="model.FromDate" grouped-inputs="FromToDates"> <input name="ToDate" type="date" class="form-control" ng-model="model.ToDate" grouped-inputs="FromToDates">
它可以重置自己的输入控件的有效性,但不能使用指令和相同的属性值访问其他输入控件.通过查询具有相同属性的输入,访问其他控件的最佳角度方式是什么?
我会尝试通过实现帮助对象来存储组元素控制器以及添加到组中的方法以及组中所有元素的setValidity来解决此问题.
像这样的东西:
angular.module('myModule').directive('groupedInputs',function() { var groupControls = { groups: {},add: function(name,ctrl) { this.groups[name] = this.groups[name] || []; this.groups[name].push(ctrl); },setValidity: function(name,key,value) { this.groups[name].forEach(function(ctrl) { ctrl.$setValidity(key,value); }); } }; return { restrict: 'A',link: function(scope,ctrl) { // Add element controller to the group groupControls.add(attrs.groupedInputs,ctrl); element.on('change',function() { // When needed,set validity of elements in the group groupControls.setValidity(attrs.groupedInputs,'server',false); scope.$apply(); }); } }; });