192 votes

AngularJS n'envoie pas la valeur du champ caché

Pour un cas d'utilisation spécifique, je dois soumettre un formulaire unique à l'"ancienne méthode". Autrement dit, j'utilise un formulaire avec action="". La réponse est diffusée en continu, ce qui m'évite de recharger la page. Je suis tout à fait conscient qu'une application AngularJS typique ne soumettrait pas un formulaire de cette façon, mais jusqu'à présent, je n'ai pas d'autre choix.

Cela dit, j'ai essayé de remplir certains champs cachés à partir d'Angular :

<input type="hidden" name="someData" ng-model="data" /> {{data}}

Veuillez noter que la valeur correcte des données est indiquée.

Le formulaire ressemble à un formulaire standard :

<form id="aaa" name="aaa" action="/reports/aaa.html" method="post">
...
<input type="submit" value="Export" />
</form>

Si j'appuie sur "submit", aucune valeur n'est envoyée au serveur. Si je modifie le champ de saisie pour qu'il contienne du "texte", cela fonctionne comme prévu. Je suppose que le champ caché n'est pas réellement rempli, alors que le champ de texte est affiché en raison de la liaison bidirectionnelle.

Avez-vous une idée de la façon dont je peux soumettre un champ caché rempli par AngularJS ?

4 votes

Hmm... et si on tapait du texte, display: none; ? Mais c'est moche. Angular ignore les éléments cachés.

0 votes

Mettez cela comme réponse @tymeJV !

7 votes

J'utilise la syntaxe suivante pour lier une valeur : <input type="hidden" required ng-model="data.userid" ng-init="data.userid=pivot.id" /> . Ce n'est peut-être pas la bonne façon de faire, mais cela fonctionne pour moi.

0voto

Ivan Kuznietsov Points 21

J'utilise un javascript classique pour donner une valeur à une entrée cachée.

$scope.SetPersonValue = function (PersonValue)
{
    document.getElementById('TypeOfPerson').value = PersonValue;
    if (PersonValue != 'person')
    {
        document.getElementById('Discount').checked = false;
        $scope.isCollapsed = true;
    }
    else
    {
        $scope.isCollapsed = false;
    }
}

0voto

Pawan Parashar Points 40

Le code ci-dessous fonctionnera à condition qu'il soit dans le même ordre que celui mentionné. assurez-vous que l'ordre est le suivant : type puis nom, ng-model ng-init, value. c'est tout.

0voto

J. Middya Points 1

Ici, je voudrais partager mon code de travail :

<input type="text" name="someData" ng-model="data" ng-init="data=2" style="display: none;"/>
OR
<input type="hidden" name="someData" ng-model="data" ng-init="data=2"/>
OR
<input type="hidden" name="someData" ng-init="data=2"/>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X