2017-07-24 8 views
0

Je suis venu à Angular à partir d'un arrière-plan Grails où vous définiriez la validation de vos règles métier en un seul endroit par rapport à un modèle de domaine. GORM ... Alors quand je suis arrivé à Angular, en passant par Ionic, je suis surpris de ne pas voir quelque chose de familier. Est-ce que j'ai râté quelque chose? Y a-t-il un meilleur moyen?Pourquoi la validation angulaire est-elle effectuée dans les composants/formulaires pas une seule fois sur le modèle de domaine?

+0

Est-ce que Grails est un framework web Java? Je ne vois pas de relation entre le monde Java et le monde Javascript - ou ai-je raté quelque chose? –

+0

Eh bien c'est la décentralisation de la validation qui fait que la duplication des efforts que j'essaie de mettre en évidence. De plus, vous pouvez avoir des composantes différentes pour le composant 1 et le composant 2, par exemple 1 a, b, c, 2 a, b, d. Conduit à un désordre. Et oui Grails est un framework de pile complet avec Java/Spring/Hibernate sous les couvertures .. – JGFMK

Répondre

1

Vous pouvez implémenter la validation dans tous les cas. Ajoutez simplement 1 couche supplémentaire entre les formes angulaires et votre domaine. En général, Angular ne dicte pas le fonctionnement de votre application. Il vous donne simplement des instruments pour interagir avec le navigateur et les API.

Vous pouvez toujours implémenter la méthode Domain#valid() et mettre à jour des champs via des formulaires réactifs.

@Component({}) 
export class MyComponent implements OnInit{ 

    public form: Form = this.fb.group({ 
     fName: ['', []], 
     lName: ['', []] 
    }); 

    constructor(fb: FormBuilder){} 

    ngOnInit(){ 
     this.form.valueChanges.subscribe((form) => { 
      let entity: Entity = new Entity(form); 
      let errors: ValidationErrors = entity.valid(); 
      if(errors.length){ 
       this.form.setErrors(errors); 
       this.form.updateValueAndValidity(); 
      } 
     }); 
    } 
} 
+0

Entity/EntityError - qu'est-ce que c'est? Je comprends updateValueAndValidity d'ici https://angular.io/api/forms/AbstractControl – JGFMK

+1

C'est juste du pseudo code. Entité - votre propre classe, qui pourrait être 'class UserEntity implémente IEntity {}', où 'interface IEntity {valide(): EntityError []; } '. 'EntityError' est encore une fois abstraction/interface, qui peut être fournie à la méthode' setErrors() 'd'Angular. Oups, exemple de code mis à jour, car j'avais une faute de frappe là-bas. –

+0

Merci beaucoup. Pour d'autres c'est ... https://angular.io/api/forms/AbstractControl#setErrors ... https://angular.io/api/forms/ValidationErrors - – JGFMK