Тип ввода = число сообщений об ошибках проверки, кратных с помощью clr-control-error

Сейчас я работаю с Clarity в личном проекте, мне так нравится эта система дизайна, поэтому я буду просить много (извините за это).

Сегодня я пытался реализовать множественные ошибки сообщения проверки для ввода номера типа в форму. Документ объясняет, что я должен использовать *clr-control-error для достижения этой цели, но это было невозможно.

На данный момент проверка ввода номера типа для отображения «необходимого» текста работает нормально.

Просмотреть сообщение на imgur.com

Но что, если пользователь попытается ввести букву в поле? Это случается с символом «е». В этом случае я хочу показать другой текст, например «Недопустимый параметр» или что-то подобное.

Просмотреть сообщение на imgur.com

Я пытался сделать это:

<clr-input-container>
      <label class="clr-col-4 clr-col-md-4">Precio de Costo</label>
      <input class="clr-col-8 clr-col-md-8" clrInput type="number" formControlName="precioCosto" />
      <clr-control-error *clrIfError="'required'">Requerido</clr-control-error>
      <clr-control-error *clrIfError="'invalid'">Parámetro Inválido</clr-control-error>
 </clr-input-container>

Но всегда показывать первое сообщение. Я тоже пытался сделать с *ngIf, но похоже есть конфликт с *clr-control-error.

У вас есть способ решить эту проблему? Буду очень признателен за вашу помощь.

Обновление: добавлен код контроллера, чтобы прояснить проблему:

import { Component, OnInit } from '@angular/core';
import { FormBuilder, Validators, FormGroup } from '@angular/forms';

@Component({
  selector: 'app-productos',
  templateUrl: './productos.component.html',
  styleUrls: ['./productos.component.scss']
})
export class ProductosComponent implements OnInit {

  private productoForm: FormGroup;

  constructor(
     private fb: FormBuilder
  ) { }

  ngOnInit() {
    this.setProductoForm();
  }

  get f() { return this.productoForm.controls; }

  setProductoForm() {
     this.productoForm = this.fb.group({
      id: [this.productos.length + 1],
      nombre: ['', Validators.required],
      laboratorio: ['', Validators.required],
      unidadMedida: ['', Validators.required],
      precioCosto: ['', Validators.required],
      precioVenta: ['', Validators.required]
    });
  }
}

person César Gómez    schedule 23.12.2018    source источник
comment
Можете ли вы предоставить код, в котором вы создаете элементы управления формой в контроллере?   -  person Jeremy Wilken    schedule 24.12.2018
comment
Готово, @JeremyWilken.   -  person César Gómez    schedule 26.12.2018


Ответы (1)


Буква e является допустимым символом в числовом поле, когда вы также используете ее с цифрой, поскольку это способ обозначения экспонент. В браузерах могут быть несоответствия в том, как они справляются с этим, но вот спецификация https://www.w3.org/TR/html5/sec-forms.html#number-state-typenumber. Это действительно так, как и ожидалось, поскольку вы еще не ввели требуемое значение, поэтому вы получите require тип ошибки. Существуют и другие символы, такие как -, которые могут быть введены в поле, но все же не являются самостоятельным значением.

Вы можете написать свой собственный валидатор, чтобы самостоятельно обрабатывать эти случаи. По умолчанию invalid валидатора нет, вам придется его написать, см. https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/HTML5/Constraint_validation.

person Jeremy Wilken    schedule 02.01.2019