我有一个Angular2指令的问题,应该执行以下操作:
>检测用户是否输入’.’字符.
>如果下一个字符也是’.’,请删除重复的’.’并将光标位置移动到’.’之后烧焦
我有上述工作,但是,当与ngModel结合使用时,每次更新模型时光标位置都会跳到最后.
输入:
<input type="text" name="test" [(ngModel)]="testInput" testDirective/>
指令:
import {Directive,ElementRef,Renderer,HostListener,Output,EventEmitter} from '@angular/core'; @Directive({ selector: '[testDirective][ngModel]' }) export class TestDirective { @Output() ngModelChange: EventEmitter<any> = new EventEmitter(); constructor(private el: ElementRef,private render: Renderer) { } @HostListener('keyup',['$event']) onInputChange(event) { // get position let pos = this.el.nativeElement.selectionStart; let val = this.el.nativeElement.value; // if key is '.' and next character is '.',skip position if (event.key === '.' && val.charAt(pos) === '.') { // remove duplicate periods val = val.replace(duplicatePeriods,'.'); this.render.setElementProperty(this.el.nativeElement,'value',val); this.ngModelChange.emit(val); this.el.nativeElement.selectionStart = pos; this.el.nativeElement.selectionEnd = pos; } } }
这是有效的,除了光标位置跳到最后.删除行:
this.ngModelChange.emit(val);
修复问题并且光标位置正确,但模型未更新.
任何人都可以推荐一个解决方案吗?或者我可能采取了错误的方法解决问题?
谢谢