2016-06-27 53 views
15

Ho seguito angolare 2 forma:angolare convalida 2 forma, minLength validatore non funziona

<register> 
    <form [ngFormModel] = "registrationForm"> 
     <div class = "form-group"> 
      <label class = "control-label" for="email">Email</label> 
      <input class = "form-control" type="email" id="email" ngControl="email" #email="ngForm"> 
     </div> 
     <div *ngIf = "email.touched && email.errors"> 
      <div *ngIf = "!email.errors.required && email.errors.underscoreNotFound" class = "alert alert-danger"> 
       <span>Underscore is required</span> 
      </div> 
      <div *ngIf = "email.errors.required" class = "alert alert-danger"> 
       <span>Email is required</span> 
      </div> 
     </div> 
     <div class = "form-group"> 
      <label class = "control-label" for="password">Password</label> 
      <input class = "form-control" type="password" id="password" ngControl="password" #password="ngForm"> 
     </div> 
     <div *ngIf = "password.touched && password.errors"> 
      <div *ngIf = "password.errors.minLength && !password.errors.required" class = "alert alert-danger"> 
       <span>Password should contain 6 characters</span> 
      </div> 
      <div *ngIf = "password.errors.required" class = "alert alert-danger"> 
       <span>Password is required</span> 
      </div>   
     </div> 
    </form> 
</register> 

questo è il mio componente in cui ho implementato validatori:

import {Component} from '@angular/core'; 
import {Control, ControlGroup, FormBuilder, Validators} from '@angular/common'; 
import {CustomValidator} from './CustomValidator'; 

@Component({ 
    selector: 'register', 
    templateUrl: './app/authentication/register_validation/register.html', 
}) 

export class RegisterComponent{ 
    registrationForm: ControlGroup; 

    constructor(formBuilder:FormBuilder) 
    { 
     this.registrationForm = formBuilder.group({ 
      email: ['',Validators.compose([Validators.required, CustomValidator.underscore])], 
      password: ['',Validators.compose([Validators.required,Validators.minLength(6)])] 
     }); 
    } 

} 

In questa forma, email campo sta funzionando bene per entrambi i validatori, cioè quando non scrivo nulla, dà il messaggio "Email is required", quando inizio a digitare qualcosa, dà il messaggio "Underscore is required" e quando digito lo "_" tutti i messaggi di errore scompaiono. Tuttavia, quando provo ad applicare questi 2 validatori sul campo password, non funziona. Quando non digito la password, viene visualizzato il messaggio "Password is required". Ma quando digito qualcosa di meno di 6 caratteri, il messaggio minLength non viene visualizzato affatto. Cosa c'è di sbagliato in questo codice?

+0

Puoi creare un https://plnkr.co con il tuo codice –

+0

Inoltre stai usando la versione inferiore di RC3. che è deprecato. Prova la nuova versione RC3 –

+0

potrebbe fare riferimento a questa risposta http://stackoverflow.com/a/38092249/5868331 – mayur

risposta

33

Il error key is minlength e non minLength:

<div *ngIf = "password.hasError('minlength') && !password.hasError('required')" class = "alert alert-danger"> 
    <span>Password should contain 6 characters</span> 
</div> 
+1

Il tuo link è morto, ma la soluzione funziona ancora. Quando stai ancora imparando, penseresti che 'Validators.maxLength' verrebbe controllato dalla chiave identica, specialmente dal momento che angolare non ha paura dell'involucro di cammello ovunque. Ma immagino che significhi corrispondere ai validatori HTML5? In ogni caso, grazie. –

+0

La vera domanda è perché? Sto cercando di aggiungere convalide dinamiche, quindi ora devo chiamare a LowerCase per passare dalla funzione alla chiave di errore? Spero che sia almeno coerente. – Greg

8

Questo mi ha davvero catturato fuori così come ho abbinato la chiave nella mia markup per quello che avevo in codice che non è corretto.

codice di esempio

password1: ['', [Validators.required, Validators.minLength(8)]],

Esempio Markup

*ngIf="registrationRequest.get('password1').hasError('minlength')"

Nota nel codice è minlength interamente in minuscolo.