W przypadku konkretnego zastosowania muszę przesłać pojedynczy formularz „starą drogą”. Znaczy, używam formularza z działaniem = "". Odpowiedź jest przesyłana strumieniowo, więc nie ładuję strony ponownie. Jestem w pełni świadomy, że typowa aplikacja AngularJS nie przesyła formularza w ten sposób, ale jak dotąd nie mam innego wyboru.
To powiedziawszy, próbowałem wypełnić niektóre ukryte pola z Angulara:
<input type="hidden" name="someData" ng-model="data" /> {{data}}
Uwaga: wyświetlana jest poprawna wartość w danych.
Formularz wygląda jak standardowy formularz:
<form id="aaa" name="aaa" action="/reports/aaa.html" method="post">
...
<input type="submit" value="Export" />
</form>
Po naciśnięciu przycisku Prześlij żadna wartość nie zostanie wysłana na serwer. Jeśli zmienię pole wprowadzania na „tekst”, będzie działać zgodnie z oczekiwaniami. Moje założenie jest takie, że ukryte pole nie jest tak naprawdę wypełnione, podczas gdy pole tekstowe jest faktycznie wyświetlane ze względu na dwukierunkowe wiązanie.
Jakieś pomysły, jak mogę przesłać ukryte pole wypełnione przez AngularJS?
źródło
display: none;
? To brzydkie. Kątowe ignoruje ukryte elementy.<input type="hidden" required ng-model="data.userid" ng-init="data.userid=pivot.id" />
. To może nie być właściwy sposób, ale działa dla mnie.Odpowiedzi:
Nie można używać podwójnego wiązania z ukrytym polem. Rozwiązaniem jest użycie nawiasów:
EDYCJA: Zobacz ten wątek na github: https://github.com/angular/angular.js/pull/2574
EDYTOWAĆ:
Od wersji Angular 1.2 możesz użyć dyrektywy „ng-value”, aby powiązać wyrażenie z atrybutem wartości wejścia. Niniejsza dyrektywa powinna być używana z wejściowym radiem lub polem wyboru, ale działa dobrze z ukrytym wejściem.
Oto rozwiązanie wykorzystujące wartość ng:
Oto skrzypce używające wartości ng z ukrytym wejściem: http://jsfiddle.net/6SD9N
źródło
Zawsze możesz użyć
type=text
a,display:none;
ponieważ Angular ignoruje ukryte elementy. Jak mówi OP, normalnie byś tego nie zrobił, ale wydaje się to szczególnym przypadkiem.źródło
W kontrolerze:
W widoku:
źródło
entityId
jeślientityId
jest tablicąZnalazłem fajne rozwiązanie napisane przez Mike'a w sapiensworks . Jest to tak proste, jak użycie dyrektywy, która obserwuje zmiany w twoim modelu:
a następnie powiąż swoje dane wejściowe:
Ale rozwiązanie dostarczone przez tymeJV mogłoby być lepsze, ponieważ wejście ukryte nie uruchamia zdarzenia zmiany w javascript, jak powiedział yycorman w tym poście, więc przy zmianie wartości za pomocą wtyczki jQuery nadal będzie działać.
Edytuj Zmieniłem dyrektywę, aby zastosować nową wartość z powrotem do modelu, gdy zostanie wywołane zdarzenie zmiany, więc będzie działać jako tekst wejściowy.
więc kiedy wywołasz
$("#yourInputHidden").trigger('change')
zdarzenie za pomocą jQuery, zaktualizuje on również powiązany model.źródło
Znaleźliśmy dziwne zachowanie dotyczące tej ukrytej wartości () i nie możemy jej uruchomić.
Po zabawie okazało się, że najlepszym sposobem jest zdefiniowanie wartości w samym kontrolerze po zakresie formularza.
źródło
Osiągnąłem to przez -
źródło
zaktualizuj odpowiedź @tymeJV, np .:
źródło
Miałem do czynienia z tym samym problemem, naprawdę muszę wysłać klucz z mojego pliku JSP do skryptu Java, aby rozwiązać problem, spędzam około 4 godzin lub dłużej.
Dołączam ten tag do mojego JavaScript / JSP:
Rezultat: Portfolio 1 criado com sucesso! ID = 3.
Z poważaniem
źródło
Na wypadek, gdyby ktoś nadal miał z tym problem, miałem podobny problem podczas próby śledzenia sesji użytkownika / identyfikatora użytkownika na formularzu wielostronicowym
Naprawiłem to, dodając
.when („/ q2 /: uid” w routingu:
I dodał to jako ukryte pole do przekazywania parametrów między stronami formularza internetowego
<< input type = "ukryty" wymagany ng-model = "formData.userid" ng-init = "formData.userid = uid" />
Jestem nowy w Angular, więc nie jestem pewien, czy jest to najlepsze możliwe rozwiązanie, ale wydaje mi się, że teraz działa dobrze
źródło
Bezpośrednio przypisz wartość do modelu w
data-ng-value
atrybucie. Ponieważ interpreter kątowy nie rozpoznaje ukrytych pól jako części ngModel.źródło
Używam klasycznego javascript do ustawiania wartości ukrytych danych wejściowych
źródło
Poniższy kod będzie działał dla tego IFF w tej samej kolejności, w jakiej wspomniano, upewnij się, że zamawiasz to type, a następnie name, ng-model ng-init, value. Otóż to.
źródło
Tutaj chciałbym udostępnić mój działający kod:
źródło