我正在AngularJS中创建一个数字输入指令,其中包含文本输入和递增/递减按钮:
为简洁起见,我对其进行了简化,但这实际上是实现:
HTML模板
<div class="number-input">
<input type="text"
class="form-input"
ng-model="number"
placeholder="{{placeholder}}"
pattern="^-?(\d+|\d*\.\d+)([e|E]\d+)?$" />
<div>
<button type="button" ng-click="number++">
<i class="fa fa-plus"></i>
</button>
<button type="button" ng-click="number--">
<i class="fa fa-minus"></i>
</button>
</div>
</div>
JavaScript
angular
.module('exampleModule')
.directive('numberInput', numberInput);
function numberInput() {
return {
restrict: 'E',
replace: true,
templateUrl: 'numberInput.html',
scope: {
placeholder: '@?',
number: '=ngModel'
},
require: 'ngModel'
};
}
这将导致两个ngModel控制器-一个用于外部数字输入指令,一个用于内部文本输入。问题是,如果用户输入的内部视图值无效,即它与pattern属性中定义的正则表达式不匹配,则内部ngModel控制器会将验证器ID添加到其$ error对象,而外部ngModel控制器会不是。
因此,我无法输出“模式”验证器的验证错误:
<label class="label">Number</label>
<number-input name="numberInput"
ng-model="ctrl.number"
placeholder="Number"></number-input>
<ul ng-show="ctrl.demoForm.numberInput.$dirty">
<li ng-show="myForm.numberInput.$error.required"
class="form-error">Please enter a number</li>
<li ng-show="myForm.numberInput.$error.pattern"
class="form-error">The number you entered is not valid</li>
</ul>
我意识到我可以删除模式属性,并使用$ parsers将验证移到外部ngModelController上,但是我有更复杂的输入,在那里这不可行。例如范围输入,其内部使用两个数字输入作为下限和上限。在这种情况下,数字选择器需要在其输入中的任何一个无效时通知范围选择器,并且范围选择器需要在错误中反映出来。
我真正想要的是外部ngModel继承内部ngModel的错误。这可能吗?如果可以,怎么办?
谢谢!