Поля ввода номера типа позволяют пользователям вводить символы, которые не являются частью числа. Подробнее см. здесь .
Я не понимаю, как вы справляетесь с установкой значения переменной score.valid
. Тем не менее, это может быть достигнуто с помощью CSS псевдо-классов.
input:invalid+span:after {
content: 'Insert a value between 0.0 and 10.0';
padding-left: 5px;
}
<!-- Score input -->
<div class="form-group">
<label for="score">Score</label>
<input id="input-validator" type="number" class="form-control"
placeholder="0.0 ÷ 10.0"
min="0.0" max="10.0" step="0.1" name="score"
id="score"
[(ngModel)]="model.score"
#score="ngModel">
<span class="alert alert-danger"></span>
</div>
Обновление: Включить кнопку «Отправить».
Шаблон:
<form #scoreValue="ngForm" (ngSubmit)="submitScore(scoreValue.value)">
<label>Score: </label>
<input type="number" class="form-control" (keyup)="onKeyUp($event)"
placeholder="0.0 ÷ 10.0"
[min]="min" [max]="max" [step]="step" name="score"
id="score"
[(ngModel)]="score"/>
<span class="alert alert-danger"></span>
<br /><br />
<span> Does not work as expected -> </span>
<button [disabled]="scoreValue.invalid">Submit</button>
<br /><br />
<span> Works as expected -> </span>
<button [disabled]="disableSubmit">Submit</button>
</form>
Компонент:
public onKeyUp(event){
let score = event.currentTarget.value;
if ((score === '') || ((score.split('.')[1] || []).length > 1)) {
this.disableSubmit = true;
} else {
score = Number(score);
if ((score >= this.min) && (score <= this.max)) {
this.disableSubmit = false;
} else {
this.disableSubmit = true;
}
}
}
Рабочий пример: Stackblitz
Атрибуты min
и max
устанавливают только минимальное и максимальное значения шаговых стрелок. Вот почему scoreValue.invalid
не работает должным образом.