2017-10-18 62 views
0

我正在使用Ionic(和Angular)。我有一个指令,它在使用DecimalPipe转换它之后更改输入的值。这些值只是数字。添加逗号时,插入符号向后移动

问题是,当逗号被添加到数字中时(例如:当用户将数值从100更改为1,000时),光标向后移动一个位置。 它看起来并不在意添加了逗号。

我的代码:

let decimalPipe = new DecimalPipe(window.navigator.language); 
    val = decimalPipe.transform(val, this.numberDecimal()); 


    this.model.valueAccessor.writeValue(val); 
    this.renderer.setElementProperty(this.elementRef.nativeElement.querySelector('input'), 'value', val); 

    this.model.viewToModelUpdate(val); 

modelNgControl类型和rendererRenderer型。

回答

0

问题出在Android设备上。我没有找到解决方案,因此我写了一个解决方法,在0毫秒超时后更改脱字符的位置。

// before the change 
let inputElem = this.elementRef.nativeElement.querySelector('input'); 
let caretPos = inputElem.selectionStart; 
let numOfCommas = (value.match(/,/g) || []).length; 
... 

//after the change 
let newNumOfCommas = (val.match(/,/g) || []).length; 
if (newNumOfCommas != numOfCommas) 
{ 
    setTimeout(() => 
    { 
     let pos = newNumOfCommas > numOfCommas ? caretPos+1 : caretPos - 1; 
     inputElem.setSelectionRange(pos, pos); 
    }, 0); 
}