Formulaire personnalisé de validation de la directive pour comparer deux champs
Je suis angulaire débutant, et je suis tomber sur quelque chose dans la façon dont angulaire de la validation du formulaire de directives de travail.
Je sais que je peux facilement ajouter des directives de champs individuels, mais je vais essayer d'ajouter une validation qui sera comparer deux champs de formulaire (les deux sont des éléments d'un modèle).
Ici est une forme de squelette:
<form name="edit_form" >
<input name="min" type="number" ng-model="field.min"/>
<input name="max" type="number" ng-model="field.max"/>
</form>
<div class="error" ng-show="edit_form.min.$dirty || edit_form.max.$dirty">
<small class="error" ng-show="(what goes here?)">
Min cannot exceed max
</small>
</div>
En bref, je veux écrire une directive et l'utiliser pour afficher/masquer cette small.error
si min
et max
les deux ont des valeurs mais min > max
. Comment puis-je accéder à la fois les champs à l'intérieur d'une directive? Est une directive le bon outil pour ce travail?
Vous devez vous connecter pour publier un commentaire.
De nombreuses façons à la peau d'un chat.
PLUNKER
Utilisation:
lower-than="{{field.max}}"
aveclower-than="field.max"
? Dans de tels cascomparisonModel
devient tout simplement le nom du modèle de la liaison dans le code JS -- comment je pourrais obtenir la valeur de celui-ci alors?Vous n'avez besoin d'aucune directive. Suffit d'attribuer le "min" la valeur de max min valeur. Comme:
Et vous n'avez pas besoin de personnalisation.
Plus: vous pouvez faire
min=" {{ field.min + 1}}"
Serait une simple comparaison vous convient-il?
Je pense qu'une directive serait inutile si votre cause est juste cette. Si vous ne vous sentez pas à l'aise avec la vue contenant la logique de l'application, vous pouvez l'exporter dans une fonction de contrôleur:
Et le modèle:
Pour moi, au-delà d'un message de commentaire, j'avais besoin de définir le champ comme invalide, l'empêchant de se soumettre. J'ai donc rassemblé quelques approches, comme @thestewie approche, avec une configuration de la vue de recueillir une solution pour les dates de comparaison. J'espère pouvez regrouper les solutions qui ont été présentés.
Le code est dans PLUNKER
Ma version de la directive:
Vous pouvez prendre un coup d'oeil à https://github.com/nelsonomuto/angular-ui-form-validation
Cela donne une directive qui est préconfiguré avec une api qui expose la portée et de ses modèles à votre programme de validation de fonction.
Ici est un plunker avec le votre cas d'utilisation spécifiques: http://plnkr.co/edit/S0rBlS?p=preview
La syntaxe pour les directives validateurs est, comme indiqué dans l'exemple ci-dessous :
{
errorMessage: 'Cannot contain the number one',
validator: function (errorMessageElement, val, attr, element, model, modelCtrl){
/**
* The model and modelCtrl(scope) are exposed in the validator function
* */
return /1/.test(val) !== true;
}
}