6
在名稱字段中有一些限制,所以我試圖使用下面的指令驗證名稱字段。內部指令我正在使用正則表達式來檢查有效的名稱,然後使用valueAccessor.writeValue(newVal)
Angular 2光標在文本框末尾跳轉時更改數據
將有效的名稱替換爲文本框這裏的問題是當我試圖鍵入文本框中的某個單詞時光標跳到最後。
@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);
}
}
'this.el.nativeElement.s etSelectionRange(開始,結束);'爲我工作。這是非常酷的人。 –