Существует поле ввода, например:
<input ng-if="$ctrl.inputType === 'input'"
name={{$ctrl.param.Name}}
type="text"
ng-keyup="$ctrl.keyp()"
..."
/>
и функция keyp () в контроллере:
class AlertParameterCtrl {
constructor(AlertParameterService, $element){
this.AlertParameterService = AlertParameterService;
this.$element = $element;
this.overrideText = 'Override default';
this.inputType = 'input';
this.unitlessParameter = false;
}
...
keyp() {
const dec = 2;
const regex = new RegExp("(\\.\\d{" + dec + "})\\d+", "g");
this.param.value = this.param.value.replace(regex, '$1');
}
}
AlertParameterCtrl.$inject = ['AlertParameterService', '$element'];
Цель состоит в том, чтобы сделать возможным ввод максимум 2 цифр последесятичная точка.
Я положил debbuger
внутрь keyp()
, чтобы посмотреть, как он себя ведет.Когда после десятичной запятой добавляется новая цифра, значение this.param.value
остается на шаге до.
Например, если начальное значение равно 100
, и я пишу 100.
, значение this.param.value
остается 100
.
После этого шага я ввожу еще одну цифру, 100.2
, значение this.param.value
становится 100.
и т. Д.
Итак, когда есть3 цифры на входе и 2 цифры на переменную (this.param.value
), я пишу еще одну, чтобы посмотреть, не остановит ли она ее в форме ввода.
Но вместо того, чтобы использовать регулярное выражение для этого, значение this.param.value
не определено, и я получаю эту ошибку:
Невозможно прочитать свойство 'replace' of undefined
Кто-нибудь знает, почему возникают эти 2 проблемы?Как если бы вы были на шаге раньше и почему, когда вводится третья цифра, переменная, хранящая ее, не определена?