J'ai un cours

export class Credentials {

    constructor() { }

    public username: string;
    public password: string;
}

Et l'utiliser dans mon composant comme ceci

export class RegisterComponent implements OnInit {
  registerModel: Credentials

  constructor() {
    this.registerModel= new Credentials ()
  }

  ngOnInit(): void {    
  }
}

Je veux ajouter une validation personnalisée au modèle avant d'appeler mon api, je sais que c'est possible

registerModel: FormGroup;

  constructor(private fb: FormBuilder) {
    this.registerModel = this.fb.group({
      username: ['', Validators.required],
      password: ['', Validators.required]
    })

Mais je veux avoir des classes/interfaces définies pour mes modèles, et à l'intérieur il y a ma validation, est-ce possible ?

0
Nesquikk M 29 oct. 2020 à 21:50

1 réponse

Meilleure réponse

La seule façon que je connaisse pour ajouter un validateur est de définir un formControl -ou d'utiliser setValidator-. Ainsi, votre classe peut être une forme de propriété

export class Credentials {
    public form:FormGroup
    public username: string;
    public password: string;

    constructor(data:any=null) { 
      data=data || {username:null,password:null}
      this.username=data.username
      this.password=data.password
      this.form=new FormGroup({
          userName:new FormControl(this.username,Validators.required),
          password:new FormControl(this.password,Validators.required)
      })
    }
}

//and use
this.form=this.credentials.form

Ou a une propriété validateurs

export class Credentials {
    public validators:any
    public username: string;
    public password: string;
    constructor(data:any=null) { 
      data=data || {username:null,password:null}
      validators={
         userName:[Validators.required],
         password:[Validators.required]
      }
    }
}

// and use as

this.form = new FormGroup({
  userName: new FormControl(
    this.credentials.username,this.credentials.validators.username
  ),
  password: new FormControl(
    this.credentials.password,this.credentials.validators.password
  )
});
1
Eliseo 30 oct. 2020 à 08:32