6
votes

Formulaires pilotés de modèle en angulaire 2

En ce qui concerne les avantages et les inconvénients du modèle piloté par rapport aux formes pilotées par le modèle en angular 2 (bêta.0), je me demande comment une validation personnalisée peut être jointe à un simple champ de saisie de texte à l'aide de formulaires pilotés par gabarit. Il n'y a pas d'exemples (à côté des besoins) disponibles pour cette approche ou je ne les ai pas trouvés.

validate(control:Control):ValidationResult {
   if (control.value === 'Monkey') {
      return { invalidName: true }
   }
}


3 commentaires

Voir si cela aide: blog.ng- book.com/the-ultimate-guide-a-forms-in-angular-2


Regardez ici ... Stackoverflow.com/q/34350049/5043867


Malheureusement, il y a juste des exemples utilisant Formbuilder. Je me demande si je peux attacher un validateur lorsque je vais définir ngcontrol = "nom" implicitement?


3 Réponses :


2
votes

Dans les formes pilotées par des modèles Vous devez créer une directive pour le validateur personnalisé et l'ajouter à l'élément d'entrée tel que l'attribut HTML (de la même manière que vous l'appendez requis attribut).

Vous devriez lire cet article sur la manière de créer des directives pour les validateurs personnalisés: http://blog.frowram.io/angular/2016/03/14/custom-validators-in-angular-2.html


0 commentaires

0
votes

dans le modèle piloté par des temples Vous devez créer une directive pour le validateur personnalisé et l'utiliser sur des éléments de modèle.

Voici mon fichier de directive, P>

validator.directive.ts p>

import { Directive, forwardRef, Attribute } from '@angular/core';
import { Validator, AbstractControl, NG_VALIDATORS } from '@angular/forms';

@Directive({
    selector: '[validateEqual][formControlName],[validateEqual][formControl],[validateEqual][ngModel]',
    providers: [
        { provide: NG_VALIDATORS, useExisting: forwardRef(() => EqualValidator), multi: true }
    ]
})
export class EqualValidator implements Validator {
    constructor( @Attribute('validateEqual') public validateEqual: string,
        @Attribute('reverse') public reverse: string) {

    }

    private get isReverse() {
        if (!this.reverse) return false;
        return this.reverse === 'true' ? true: false;
    }

    validate(c: AbstractControl): { [key: string]: any } {
        // self value
        let v = c.value;

        // control vlaue
        let e = c.root.get(this.validateEqual);

        // value not equal
        if (e && v !== e.value && !this.isReverse) {
          return {
            validateEqual: false
          }
        }

        // value equal and reverse
        if (e && v === e.value && this.isReverse) {
            delete e.errors['validateEqual'];
            if (!Object.keys(e.errors).length) e.setErrors(null);
        }

        // value not equal and reverse
        if (e && v !== e.value && this.isReverse) {
            e.setErrors({
                validateEqual: false
            })
        }

        return null;
    }
}


0 commentaires

0
votes

Les formes pilotées de modèle sont assez faciles à utiliser. Mais comme la taille de votre application augmente, il devient complexe de gérer toutes les validations. Comme le nom suggère le modèle de formulaire et sa validation est effectué principalement sur le modèle HTML uniquement afin que votre code de modèle augmente. En cas de réagissance de formulaires / modèles pilotés, vous devez configurer vos champs de contrôle dans le type dossier uniquement. Donc, les deux sont bons et possèdent des avantages propres, donc en fonction de l'exigence, il faut en choisir un de l'autre approche.


0 commentaires