Как получить текст в поле ввода type=number angular

Я хочу получить текст в типе ввода = "число".

<input type="number" class="form-control" [(ngModel)]="home" name="home" required min="0" step="1">

Я хочу:

  1. Показывать одно сообщение, когда поле пусто
  2. Показать другое сообщение, когда ввод в поле недействителен

в моем классе ts я делаю:

if(this.home==null){
//show message empy field
}

проблема заключается в том, чтобы показать второе сообщение, потому что в моем formControll (когда ввод равен 22...) он дает мне, что this.home равен нулю, и поэтому он дает мне первую ошибку. Как получить доступ к тексту в типе ввода numer или что мне нужно сделать? Кто-нибудь может мне помочь? (Я использую шаблон формы)


person Doflamingo19    schedule 19.10.2018    source источник
comment
Каково ваше условие для недопустимого ввода?   -  person SiddAjmera    schedule 19.10.2018
comment
@SiddAjmera равно 10,10, или 100,00, или 100, или 100,0 (без ограничений для целочисленных частей и не менее 2 цифр в десятичных частях), но это ошибка ввода 45.. или 100.   -  person Doflamingo19    schedule 19.10.2018
comment
Извиняюсь. не совсем понял. Не могли бы вы четко указать условие, когда оно будет действительным, а когда недействительным. Может быть, добавить это к вашему вопросу.   -  person SiddAjmera    schedule 19.10.2018
comment
@SiddAjmera Я хочу показать два сообщения об ошибке. Первое сообщение: если ввод пуст, я показываю это сообщение (пустое поле). Второе сообщение — когда пользователь вводит это значение (10..,10.), и я показываю это сообщение (недопустимое поле). Проблема с полем типа ввода = число, когда есть пустое поле, а недопустимое поле - это одно и то же, потому что переменная home стала нулевой   -  person Doflamingo19    schedule 19.10.2018
comment
Я добавил ответ, который может быть решением ваших проблем. Пожалуйста, посмотрите.   -  person SiddAjmera    schedule 19.10.2018


Ответы (4)


Поскольку вы используете шаблонные формы, вы можете использовать атрибуты required и pattern="^[0-9]+\.[0-9][0-9]$" для достижения желаемого.

В случае отображения ошибок вы можете применить переменную шаблона к домашнему полю и присвоить ей ngModel(#home="ngModel").

Затем вы можете показывать ошибки в зависимости от значения home.errors

Попробуй это:

<form 
  #form="ngForm" 
  (ngSubmit)="onFormSubmit(form)">

  <input 
    type="number" 
    name="home" 
    ngModel 
    #home="ngModel" 
    required
    class="form-control"
    min="0"
    pattern="^[0-9]+\.[0-9][0-9]$"
    >
  <br/>

  <div class="red" *ngIf="home.touched">
    <div *ngIf="home.errors?.required">
      Home is required!
    </div>
  </div>

  <div class="red" *ngIf="home.touched">
    <div *ngIf="home.errors?.pattern">
      Home is invalid!
    </div>
  </div>

  <button 
    type="submit"
    [disabled]="form.invalid">
    Submit
  </button>

</form>

Вот Образец StackBlitz для вашего исх.

person SiddAjmera    schedule 19.10.2018
comment
Я нахожу ошибку в вашем решении, если я введу это значение ...., сообщение должно быть недействительным и не обязательным - person Doflamingo19; 19.10.2018

Прежде всего, вы не можете установить строковое значение для элемента управления числового типа.

Если вы хотите установить сообщение на основе значения типа ввода. Затем вы можете использовать (ngModelChange)="modelChanged($event)"

HTML

<input type="number" (ngModelChange)="modelChanged($event)" 
class="form-control" [(ngModel)]="home" name="home" required min="0" step="1">

ts

modelChanged(value){

 if(value==null){
    //show message empy field
 }
}
person Sunil Singh    schedule 19.10.2018
comment
ваше решение работает, но в данном случае оно неверно для меня, потому что мне нужно показать другую ошибку, а не общую ошибку! - person Doflamingo19; 19.10.2018
comment
Вы не можете установить значение string в поле number. - person Sunil Singh; 19.10.2018
comment
Обновил ответ, надеюсь, что это поможет, если не уточнить ваш вопрос дальше. - person Sunil Singh; 19.10.2018
comment
Я пробую ваше решение, но оно неверно, проблема все еще здесь. Проблема в следующем: когда я помещал ошибку в свой номер типа ввода, значение (в вашем примере) стало нулевым, поэтому я не могу выполнить проверку, если оно пусто или недействительно. - person Doflamingo19; 19.10.2018
comment
Ваше требование довольно неясно. Было бы лучше, если бы вы могли объяснить подробно. - person Sunil Singh; 19.10.2018

Если вам нужен некоторый контент в виде текста в номере типа ввода, вы также можете использовать заполнитель, помимо этого.

Это также можно сделать с помощью проверки формы Angular.

Использование ngModel в форме дает вам больше, чем просто двустороннюю привязку данных. Он также сообщает вам, коснулся ли пользователь элемента управления, изменилось ли значение или значение стало недействительным.

Директива NgModel не просто отслеживает состояние; он обновляет элемент управления специальными классами CSS Angular, которые отражают состояние. Вы можете использовать эти имена классов, чтобы изменить внешний вид элемента управления.

Вы можете использовать

  1. ng-valid или ng-invalid, чтобы получить значение true или false для типа проверки
  2. ng-dirty и ng-pristine, чтобы узнать, изменил ли пользователь значение по умолчанию.

  3. ng-touched или ng-untouched, чтобы узнать, отреагировал ли пользователь на поле ввода или коснулся его.

Фрагмент примера

<input type="text" class="form-control" id="name" required [(ngModel)]="model.name" name="name" #name="ngModel">

<div [hidden]="name.invalid" class="alert alert-danger">
    Name is required
</div>

<div [hidden]="name.pristine" class="alert alert-danger">
    No value entered yet
</div>

Для получения дополнительной информации о проверке Angular

Или вы можете назвать событие как

 <input type="number" class="form-control" [(ngModel)]="home" name="home" required min="0" step="1" (focusout)="callMethod($event)"> <=== here

<div *ngIf="showErrorOne==1"> Regex Error </div>
<div *ngIf="showErrorTwo==1"> Type Error </div>

Затем в вашем файле .ts

callMethod(e)
{
var checkerVar = e.target.value
if(checkerVar.match(/(Your regex part)/)==false)
 {
  then.showErrorOne=1;
 }
else if(typeof(checkerVar)==string)
 {
  then.showErrorTwo=1;
 }
}
person Richard Pariath    schedule 19.10.2018

Попробуйте добавить import { FormsModule } from '@angular/forms'; в файл app.module.ts.

person Mehmet    schedule 19.10.2018
comment
Я только что импортировал FormsModule, но он не работает! - person Doflamingo19; 19.10.2018