在表单上,我们有一个使用jquery插件通过指令工作的屏蔽输入 .
这很好用 - 用户看到蒙面电话值(但只在焦点后),但我们需要有未制作的模型值而不是屏蔽(例如,如果我们输入电话 (123)456-78-90 ,我们必须将模型设为 1234567890 ,同时我们有在我们的领域 (123)456-78-90 看到 .
好的,我们将 ngModel.$parsers
添加到指令中 . 好吧,这样做很好 - 我们需要 .
.directive('phoneNumber', function() {
return {
restrict: 'A',
require: 'ngModel',
link: function($scope, element, attrs, ngModel) {
$(element).mask('(999) 999-99-99');
// view -> model
ngModel.$parsers.push(function(value) {
if (value) {
return value.replace(/[^0-9]+/g, '');
}
});
}
}
});
但是当我添加验证规则时
<input type="text" class="form-control"
ng-model="phone" name="phone"
phone-number
ng-pattern="^\d+$"
ng-maxlength="10"
ng-minlength="10"
placeholder="(999)999-99-99">
-
ng-pattern="^\d+$" 我得到有效的模式,确定,这有效
-
ng-minlength="10" 我得到有效的minlength,好吧,这也有效
-
ng-maxlength="10" 由于maxlength,我收到验证错误 . 在这种情况下,似乎验证使用(123)456-78-90值而不是1234567890 .
我的问题在这里:
-
如何使用默认模型值获取屏蔽值(在开始时我得到1234567890而不是(123)456-78-90),我看到只有在字段获得焦点后才会显示屏蔽值
-
如何通过屏蔽输入获得工作验证(ng-pattern,ng-min / maxlength)?
请参阅我的代码示例中的plnkr http://plnkr.co/edit/Kalv9N2bP27v1ENAfefb?p=preview
1 回答
玩了一下之后好吧,我让它上班了:
http://plnkr.co/edit/v9dvwaFzwOw4rkwhbMnM?p=preview
情侣:
我必须做$ scope . 如我在评论中所说,做面膜后申请
自jQuery 's mask messes with the object'的值以来,我不得不对验证器做一个不那么漂亮的检查,但它可以工作:) .
码:
HTML: