9
votes

Définition de la validité d'une commande angulaire 2 à partir d'un composant personnalisé

J'ai un composant NG2 personnalisé A, j'utilise l'approche axée sur le modèle.

<form [ngFormModel]="myForm" class="layout vertical relative">
    <my-custom-comp ngControl="currentValue"></my-custom-comp>
</form>


6 commentaires

Vous pouvez donner tout le contrôle à la composante de la manière [FOO] ou [(FOO)]. The Way juste ajouter un contrôle dans les mêmes .TS Fichier et transmettez le contrôle entier au composant [FOO] = "FBGROUP.Find (" CurrentValue ")"


J'ai trouvé un moyen d'obtenir "A" ou "le" ngcontrol (guichet automatique, je ne suis pas sûr que celui que j'obtiens) via this._control = this._injector.get (ngcontrol, null); mais Je ne sais pas comment le configurer à invalide pour le tester ...


Je suppose que vous pouvez simplement injecter ngcontrol constructeur (privé ngcontrol: ngcontrol) dans votre composant sans injecter l'injecteur et l'obtenir de là. Dans ngcontrol Vous pouvez ajouter des validateurs supplémentaires ou utiliser setErrors () (non testé)


J'ai essayé d'injecter le ngcontrol mais je reçois ne peut pas instantifier la dépendance cyclique! Ngcontrolname J'ai essayé de et @skipself () @host () @Optional () mais l'erreur reste


L'erreur de dépendance cyclique provenait du Vaadin Vaadin_date_picker_control_value_accessor github.com/vaadin/vaadin-date-picker/blob/master/directives/ ... Voir ci-dessous pour répondre.


Bonjour, n'importe quelle avance sur ce cas?


3 Réponses :


0
votes
this.myForm.controls['currentValue']....
but there is currently no way to explicitely set it to valid or invalid.You can define a validator and change the criteria so it marks the control invalid. See for example https://github.com/angular/angular/issues/4933

7 commentaires

Je n'ai pas accès à this.myform dans le composant. Le validateur personnalisé est une idée, mais il se sent comme une façon de le faire ... Y a-t-il un événement que je peux émettre pour trigger l'état invalide?


Pas aussi loin que je sache. Pouvez-vous fournir plus de code? Pour moi, ce n'est pas clair ce que vous faites ou essayez d'accomplir. Vous voudrez peut-être passer le formulaire ou contrôler dans votre composant personnalisé.


J'écris un composant personnalisé (A dayspicker) La vérification de la validité est implémentée dans le composant. De l'extérieur, je voudrais l'utiliser comme une entrée de forme normale. Je vais donc ajouter le NGControl et inscrivez-le à un ngformmodel. Est-ce plus clair?


Je suppose que vous devriez simplement implémenter contrôlvalueacessor (il existe déjà plusieurs réponses)


Fondamentalement, c'est la même chose que Vaadin.com/elements/-/element/vaadin-date -Picker un composant standard connecté à un ngformModel


J'ai mis en œuvre ControlValueAccessor mais je ne vois pas où ou comment définir la validité


@Brett j'ai exactement le même problème



7
votes

Vous pouvez vérifier ce lien pour un exemple de travail: https://github.com/byavv/angular2-playground/tree/master/Client/app/modules/forms_explore

Quelques aspects clés:
Vous devez implémenter ControvalueAccessor. P>

 this.dateForm = builder.group({
          dateControl: ['', Validators.compose([Validators.required, CustomValidators.frenchDate])],
        });

    this.dateForm.valueChanges
      .subscribe((val) => {
        if (this.dateForm.valid) {
          this.onChange.emit(this.dateToTimestamp(val.dateControl));
        } else {
          this.ngControl.control.setErrors({ "wrongDate": true });
        }
      });


0 commentaires

0
votes

Comment définir valide ou invalide sur n'importe quel groupe de formes xxx


1 commentaires

pourrait ne pas être la solution requise pour cette question mais cela a fonctionné pour ce dont j'avais besoin! Merci