Für einen bestimmten Anwendungsfall muss ich ein einzelnes Formular auf "alte Weise" einreichen. Das heißt, ich benutze ein Formular mit action = "". Die Antwort wird gestreamt, daher lade ich die Seite nicht neu. Ich bin mir völlig bewusst, dass eine typische AngularJS-App kein Formular auf diese Weise senden würde, aber bisher habe ich keine andere Wahl.
Trotzdem habe ich versucht, einige versteckte Felder aus Angular zu füllen:
<input type="hidden" name="someData" ng-model="data" /> {{data}}
Bitte beachten Sie, dass der korrekte Wert in den Daten angezeigt wird.
Das Formular sieht aus wie ein Standardformular:
<form id="aaa" name="aaa" action="/reports/aaa.html" method="post">
...
<input type="submit" value="Export" />
</form>
Wenn ich auf Senden drücke, wird kein Wert an den Server gesendet. Wenn ich das Eingabefeld in "Text" ändere, funktioniert es wie erwartet. Ich gehe davon aus, dass das ausgeblendete Feld nicht wirklich ausgefüllt ist, während das Textfeld aufgrund der bidirektionalen Bindung tatsächlich angezeigt wird.
Irgendwelche Ideen, wie ich ein verstecktes Feld einreichen kann, das von AngularJS ausgefüllt wird?
quelle
display: none;
? Es ist hässlich. Angular ignoriert versteckte Elemente.<input type="hidden" required ng-model="data.userid" ng-init="data.userid=pivot.id" />
. Dies ist möglicherweise nicht die richtige Vorgehensweise, funktioniert aber für mich.Antworten:
Sie können keine Doppelbindung mit ausgeblendetem Feld verwenden. Die Lösung besteht darin, Klammern zu verwenden:
BEARBEITEN: Siehe diesen Thread auf Github: https://github.com/angular/angular.js/pull/2574
BEARBEITEN:
Seit Angular 1.2 können Sie die Anweisung 'ng-value' verwenden, um einen Ausdruck an das value-Attribut der Eingabe zu binden. Diese Anweisung sollte mit Eingabe-Radio oder Kontrollkästchen verwendet werden, funktioniert jedoch gut mit versteckten Eingaben.
Hier ist die Lösung mit ng-value:
Hier ist eine Geige mit ng-Wert und versteckter Eingabe: http://jsfiddle.net/6SD9N
quelle
Sie können immer ein
type=text
und verwenden,display:none;
da Angular versteckte Elemente ignoriert. Wie OP sagt, würden Sie dies normalerweise nicht tun, aber dies scheint ein Sonderfall zu sein.quelle
In der Steuerung:
In der Ansicht:
quelle
entityId
wennentityId
es sich um ein Array handeltIch habe eine nette Lösung gefunden, die Mike für sapiensworks geschrieben hat . Es ist so einfach wie die Verwendung einer Direktive, die auf Änderungen an Ihrem Modell achtet:
und binden Sie dann Ihre Eingabe:
Die von tymeJV bereitgestellte Lösung könnte jedoch besser sein, da versteckte Eingaben kein Änderungsereignis in Javascript auslösen, wie yycorman in diesem Beitrag sagte. Wenn Sie also den Wert über ein jQuery-Plugin ändern, funktioniert dies weiterhin.
Bearbeiten Ich habe die Direktive geändert, um einen neuen Wert wieder auf das Modell anzuwenden, wenn ein Änderungsereignis ausgelöst wird, sodass es als Eingabetext funktioniert.
Wenn Sie also ein
$("#yourInputHidden").trigger('change')
Ereignis mit jQuery auslösen , wird auch das gebundene Modell aktualisiert.quelle
Wir haben ein seltsames Verhalten bei diesem versteckten Wert () festgestellt und können ihn nicht zum Laufen bringen.
Nach dem Herumspielen haben wir festgestellt, dass der beste Weg darin besteht, den Wert im Controller selbst nach dem Formularbereich zu definieren.
quelle
Ich habe dies erreicht über -
quelle
Aktualisieren Sie die Antwort von @tymeJV, z.
quelle
Ich hatte das gleiche Problem, ich muss wirklich einen Schlüssel von meinem JSP an das Java-Skript senden. Es dauert ungefähr 4 Stunden oder mehr meines Tages, um es zu lösen.
Ich füge dieses Tag in mein JavaScript / JSP ein:
Das Ergebnis war: Portfólio 1 criado com sucesso! ID = 3.
Freundliche Grüße
quelle
Nur für den Fall, dass noch jemand damit zu kämpfen hat, hatte ich ein ähnliches Problem, als ich versuchte, die Benutzersitzung / Benutzer-ID auf mehrseitigem Formular zu verfolgen
Ich habe das durch Hinzufügen behoben
.when ("/ q2 /: uid" im Routing:
Und fügte dies als verstecktes Feld hinzu, um Parameter zwischen Webform-Seiten zu übergeben
<< input type = "hidden" erforderlich ng-model = "formData.userid" ng-init = "formData.userid = uid" />
Ich bin neu bei Angular, bin mir also nicht sicher, ob es die bestmögliche Lösung ist, aber es scheint jetzt für mich in Ordnung zu sein
quelle
Weisen Sie den Wert direkt dem Modell im
data-ng-value
Attribut zu. Da Angular Interpreter versteckte Felder als Teil von ngModel nicht erkennt.quelle
Ich benutze ein klassisches Javascript, um den Wert auf versteckte Eingaben zu setzen
quelle
Der folgende Code funktioniert für diese IFF in derselben Reihenfolge wie die angegebenen. Stellen Sie sicher, dass Ihre Bestellung vom Typ, dann Name, ng-Modell ng-init, Wert ist. das ist es.
quelle
Hier möchte ich meinen Arbeitscode teilen:
quelle