一种这样做的方式
- 输入仅清洗一次
ngChange
然后只触发一次
是使用ngModelController提供的
$parsers数组。它被设计为影响模型值(通过其返回值)的地方,但是它也可以用作输入事件的侦听器。
app.directive('cleanInput', function() { return { require: 'ngModel', link: function(scope, element, attrs, ngModelController) { var el = element[0]; function clean(x) { return x && x.toUpperCase().replace(/[^A-Zd]/g, ''); } ngModelController.$parsers.push(function(val) { var cleaned = clean(val); // Avoid infinite loop of $setViewValue <-> $parsers if (cleaned === val) return val; var start = el.selectionStart; var end = el.selectionEnd + cleaned.length - val.length; // element.val(cleaned) does not behave with // repeated invalid elements ngModelController.$setViewValue(cleaned); ngModelController.$render(); el.setSelectionRange(start, end); return cleaned; }); } }});
但是,我不确定这种用法
$parsers是否有点骇人听闻。该指令可以用作:
<input type="text" clean-input ng-model="name">
或者如果您想要一个
ngChange功能:
<input type="text" clean-input ng-model="name" ng-change="onChange()">
可以在http://plnkr.co/edit/dAJ46XmmC49wqTgdp2qz?p=preview中查看实际使用情况
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)