1
resposta

Validando form html tag

Estou tentando criar um componente que vai criar um input text, estou colocando algumas validações nele mas estou com dificuldades.

Meu componente esta assim:

<input 
  type="text" 
  id="{{id}}" 
  name="{{name}}" 
  placeholder="{{placeholder}}" 
  attr.maxlength={{maxlength}} 
  class="form-control"

  [(ngModel)]="ngModel"
  minlength="{{minlength}}"

  >

<div *ngIf="{{name}}.errors.required">
  Obrigatorio
</div>

Eu quero exibir um testo caso ele esteja marcado como obrigatorio, e não tiver nada.

Estou chamando ele assim:

<app-input-text 
      id="2" 
      name="nome" 
      placeholder="Meu botão" 
      maxlength="12" 
      [(ngModel)]="ngModel" 
      minlength="2"
      ngDefaultControl required>

    </app-input-text>

Mas recebo o seguinte erro: compiler.js:466 Uncaught Error: Template parse errors: TypeError: Cannot read property 'toUpperCase' of undefined (" >

<div [ERROR ->]*ngIf="{{name}}.errors.required">
  Obrigatorio
</div>"): ng:///AppModule/InputTextComponent.html@13:5
Can't bind to '*ngIf' since it isn't a known property of 'div'. ("
  >

<div [ERROR ->]*ngIf="{{name}}.errors.required">
  Obrigatorio
</div>"): ng:///AppModule/InputTextComponent.html@13:5
1 resposta

A mensagem de erro não ajudou muito, aliás, apareceu um toUpperCase ai que nem vejo no se código. Todavia, os componentes de entrada não deveriam, em teoria, ter regra de validação, pois você o estará amarrando a uma validação em todos os lugares. Essa validação é feita sob demanda, ou seja, quem for usar o componente que ativa ou não a validação. No entanto, isso não é uma regra.

Esse componente que você criou esta em um módulo em separado? Se estiver, e ele faz uso de alguma diretiva do Angular você deve importar no módulo dele o CommonModule.