J'ai ce formulaire: http://jsfiddle.net/dfJeN/
Comme vous pouvez le voir, la valeur du nom de l'entrée est définie de manière statique:
name="username"
, la validation du formulaire fonctionne correctement (ajoutez quelque chose et supprimez tout le texte de l'entrée, un texte doit apparaître).
Ensuite, j'essaie de définir dynamiquement la valeur du nom: http://jsfiddle.net/jNWB8/
name="{input.name}"
Ensuite, je l'applique à ma validation
login.{{input.name}}.$error.required
(ce modèle sera utilisé dans un ng-repeat) mais ma validation de formulaire est interrompue. Il est correctement interprété dans mon navigateur (si j'inspecte l'élément, j'ai vu login.username. $ Error.required).
Une idée ?
EDIT: Après avoir enregistré l'étendue dans la console, il semble que le
{{input.name}}
l'expression n'est pas interpolée. Mon formulaire en tant qu'attribut {{input.name}} mais pas de nom d'utilisateur.
MISE À JOUR: Depuis 1.3.0-rc.3 name = "{{input.name}}" fonctionne comme prévu. S'il vous plaît voir # 1404
Réponses:
Vous ne pouvez pas faire ce que vous essayez de faire de cette façon.
En supposant que ce que vous essayez de faire est que vous devez ajouter dynamiquement des éléments à un formulaire, avec quelque chose comme un ng-repeat, vous devez utiliser ng-form imbriqué pour permettre la validation de ces éléments individuels:
Malheureusement, ce n'est tout simplement pas une fonctionnalité bien documentée d'Angular.
la source
L'utilisation de ngForm imbriqué vous permet d'accéder au InputController spécifique à partir du modèle HTML. Cependant, si vous souhaitez y accéder à partir d'un autre contrôleur, cela n'aide pas.
par exemple
J'utilise cette directive pour aider à résoudre le problème:
Maintenant, vous utilisez des noms dynamiques partout où vous avez besoin de l'attribut 'dynamic-name' au lieu de l'attribut 'name'.
par exemple
la source
$interpolate
place de$parse
, je me suis senti plus utile<form ng-repeat="item in items" dynamic-name="'item'+item.id"> ... <span ng-show="item{{item.id}}.$invalid">This form is invalid</span></form>
?Le problème devrait être résolu dans AngularJS 1.3, selon cette discussion sur Github .
En attendant, voici une solution temporaire créée par @caitp et @Thinkscape :
Démo sur JSFiddle .
la source
Nice one par @EnISeeK .... mais je l'ai eu pour être plus élégant et moins gênant pour les autres directives:
la source
Juste une petite amélioration par rapport à la solution EnlSeek
Voici un essai de plunker . Voici une explication détaillée
la source
J'étends un peu la solution @caitp et @Thinkscape, pour autoriser les ng-forms imbriqués créés dynamiquement , comme ceci:
Voici ma démo sur JSFiddle .
la source
J'ai utilisé la solution de Ben Lesh et cela fonctionne bien pour moi. Mais un problème auquel j'ai été confronté était que lorsque j'ai ajouté un formulaire interne en utilisant
ng-form
, tous les états du formulaire, par exemple,form.$valid, form.$error
etc., sont devenus indéfinis si j'utilisais lang-submit
directive.Donc si j'avais ceci par exemple:
Et dans mon contrôleur:
J'ai donc dû revenir à l'utilisation d'un événement de clic normal pour soumettre le formulaire, auquel cas il est nécessaire de passer l'objet du formulaire:
Et la méthode du contrôleur révisée:
Je ne sais pas trop pourquoi mais j'espère que cela aide quelqu'un.
la source
Ce problème a été résolu dans Angular 1.3+.C'est la syntaxe correcte pour ce que vous essayez de faire:
la source
la source