【发布时间】:2017-04-19 10:00:43
【问题描述】:
名称字段有一些限制,因此我尝试使用如下指令验证名称字段。内部指令我使用正则表达式检查有效名称,然后使用 valueAccessor.writeValue(newVal) 将有效名称替换到文本框中
这里的问题是当我试图在文本框光标跳转中键入某个单词的中间时。
@Directive({
selector: '[validateName]',
host: {
'(ngModelChange)': 'onInputChange($event, false)',
'(keydown.backspace)': 'onInputChange($event.target.value, true)',
'(focusout)': 'removeClass()'
}
})
export class NameValidator {
constructor(public model: NgControl,public renderer: Renderer, public el: ElementRef) { }
onInputChange(event, backspace) {
if (!backspace) {
// Remove invalid characters (keep only valid characters)
var newVal = event.replace(/^[0-9\s]/g, '').replace(/[^A-Za-z0-9_$]/g,'');
// Add class for invalid name.
if (/^[0-9\s]/g.test(event) || /[^A-Za-z0-9_$]/g.test(event)) {
this.renderer.setElementClass(this.el.nativeElement, 'invalid-name', true);
}
else {
this.renderer.setElementClass(this.el.nativeElement, 'invalid-name', false);
}
// set the new value
this.model.valueAccessor.writeValue(newVal);
}
}
removeClass() {
this.renderer.setElementClass(this.el.nativeElement, 'invalid-name', false);
}
}
【问题讨论】:
标签: angular angular2-directives