Ich habe dieses Formular: http://jsfiddle.net/dfJeN/
Wie Sie sehen können, ist der Namenswert für die Eingabe statisch festgelegt:
name="username"
funktioniert die Formularüberprüfung einwandfrei (etwas hinzufügen und den gesamten Text aus der Eingabe entfernen, ein Text muss erscheinen).
Dann versuche ich, den Namenswert dynamisch festzulegen : http://jsfiddle.net/jNWB8/
name="{input.name}"
Dann wende ich dies auf meine Validierung an
login.{{input.name}}.$error.required
(Dieses Muster wird in einer ng-Wiederholung verwendet), aber meine Formularvalidierung ist fehlerhaft. Es wird in meinem Browser korrekt interpretiert (wenn ich das Element inspiziere, sah ich login.username. $ Error.required).
Irgendeine Idee ?
BEARBEITEN: Nach dem Protokollieren des Bereichs in der Konsole scheint es, dass die
{{input.name}}
Ausdruck ist nicht interpoliert. Mein Formular als {{input.name}} Attribut, aber kein Benutzername.
UPDATE: Seit 1.3.0-rc.3 funktioniert name = "{{input.name}}" wie erwartet. Bitte siehe # 1404
Antworten:
Sie können nicht das tun, was Sie versuchen.
Angenommen, Sie möchten einem Formular dynamisch Elemente hinzufügen, beispielsweise mit einer ng-Wiederholung. Sie müssen ein verschachteltes ng-Formular verwenden , um die Validierung dieser einzelnen Elemente zu ermöglichen:
Leider ist es keine gut dokumentierte Funktion von Angular.
quelle
Mit verschachteltem ngForm können Sie über die HTML-Vorlage auf den spezifischen InputController zugreifen. Wenn Sie jedoch von einem anderen Controller aus darauf zugreifen möchten, hilft dies nicht.
z.B
Ich benutze diese Richtlinie, um das Problem zu lösen:
Jetzt verwenden Sie dynamische Namen überall dort, wo sie benötigt werden, nur das Attribut 'dynamischer Name' anstelle des Attributs 'Name'.
z.B
quelle
$interpolate
anstelle von verwendet$parse
, fühlte mich nützlicher<form ng-repeat="item in items" dynamic-name="'item'+item.id"> ... <span ng-show="item{{item.id}}.$invalid">This form is invalid</span></form>
?Das Problem sollte in AngularJS 1.3 gemäß dieser Diskussion über Github behoben werden .
In der Zwischenzeit ist hier eine temporäre Lösung, die von @caitp und @Thinkscape erstellt wurde :
Demo auf JSFiddle .
quelle
Nizza von @EnISeeK .... aber ich habe es eleganter und weniger aufdringlich für andere Richtlinien:
quelle
Nur eine kleine Verbesserung gegenüber der EnlSeek-Lösung
Hier ist ein Plunker-Prozess . Hier ist eine detaillierte Erklärung
quelle
Ich erweitere die @ caitp- und @ Thinkscape-Lösung ein wenig, um dynamisch erstellte verschachtelte ng-Formulare wie folgt zu ermöglichen :
Hier ist meine Demo zu JSFiddle .
quelle
Ich habe die Lösung von Ben Lesh verwendet und sie funktioniert gut für mich. Ein Problem, mit dem ich konfrontiert war, war, dass beim Hinzufügen eines inneren Formulars mit
ng-form
alle Formularzustände, z. B.form.$valid, form.$error
usw., undefiniert wurden, wenn ich dieng-submit
Direktive verwendete.Wenn ich das zum Beispiel hätte:
Und in meinem Controller:
Daher musste ich zum Senden des Formulars wieder ein reguläres Klickereignis verwenden. In diesem Fall muss das Formularobjekt übergeben werden:
Und die überarbeitete Controller-Methode:
Ich bin mir nicht ganz sicher, warum das so ist, aber hoffentlich hilft es jemandem.
quelle
Dieses Problem wurde in Angular 1.3+ behoben. Dies ist die richtige Syntax für das, was Sie versuchen:
quelle
quelle