Para um caso de uso específico, tenho que enviar um único formulário da "maneira antiga". Significa, eu uso um formulário com action = "". A resposta é transmitida, por isso não estou recarregando a página. Estou perfeitamente ciente de que um aplicativo AngularJS típico não enviaria um formulário dessa maneira, mas até agora não tenho outra opção.
Dito isto, tentei preencher alguns campos ocultos do Angular:
<input type="hidden" name="someData" ng-model="data" /> {{data}}
Observe que o valor correto nos dados é mostrado.
O formulário se parece com um formulário padrão:
<form id="aaa" name="aaa" action="/reports/aaa.html" method="post">
...
<input type="submit" value="Export" />
</form>
Se eu clicar em enviar, nenhum valor será enviado ao servidor. Se eu alterar o campo de entrada para digitar "texto", ele funcionará conforme o esperado. Minha suposição é que o campo oculto não é realmente preenchido, enquanto o campo de texto é realmente mostrado devido à ligação bidirecional.
Alguma idéia de como posso enviar um campo oculto preenchido pelo AngularJS?
fonte
display: none;
? É feio. Angular ignora elementos ocultos.<input type="hidden" required ng-model="data.userid" ng-init="data.userid=pivot.id" />
. Esta pode não ser a maneira correta de fazer, mas funciona para mim.Respostas:
Você não pode usar ligação dupla com campo oculto. A solução é usar colchetes:
Edição: Veja este tópico no github: https://github.com/angular/angular.js/pull/2574
EDITAR:
Desde o Angular 1.2, você pode usar a diretiva 'ng-value' para vincular uma expressão ao atributo value da entrada. Esta diretiva deve ser usada com entrada de rádio ou caixa de seleção, mas funciona bem com entrada oculta.
Aqui está a solução usando o valor ng:
Aqui está um violino usando ng-value com uma entrada oculta: http://jsfiddle.net/6SD9N
fonte
Você sempre pode usar um
type=text
edisplay:none;
desde ignora angular elementos ocultos. Como o OP diz, normalmente você não faria isso, mas esse parece ser um caso especial.fonte
No controlador:
Na visualização:
fonte
entityId
, seentityId
é um arrayEncontrei uma boa solução escrita por Mike no sapiensworks . É tão simples quanto usar uma diretiva que observe as alterações no seu modelo:
e depois vincule sua entrada:
Mas a solução fornecida pelo tymeJV poderia ser melhor, pois a entrada oculta não dispara evento de alteração no javascript, como yycorman disse nesta publicação, portanto, ao alterar o valor através de um plugin do jQuery, ainda funcionará.
Edit Alterei a diretiva para aplicar um novo valor ao modelo quando o evento change for acionado, para que funcione como um texto de entrada.
portanto, quando você dispara um
$("#yourInputHidden").trigger('change')
evento com o jQuery, ele também atualiza o modelo vinculado.fonte
Encontramos um comportamento estranho sobre esse valor oculto () e não podemos fazê-lo funcionar.
Depois de brincar, descobrimos que a melhor maneira é apenas definir o valor no próprio controlador após o escopo do formulário.
fonte
Eu consegui isso via -
fonte
atualize a resposta de @tymeJV, por exemplo:
fonte
Eu estava enfrentando o mesmo problema, eu realmente preciso enviar uma chave do meu jsp para o script java, ele passa cerca de 4h ou mais do meu dia para resolvê-lo.
Eu incluo essa tag no meu JavaScript / JSP:
O resultado foi: Portfólio 1 criado com sucesso! ID = 3.
Cumprimentos
fonte
Caso alguém ainda lute com isso, tive um problema semelhante ao tentar acompanhar a sessão do usuário / ID do usuário no formulário de várias páginas
Eu consertei isso adicionando
.when ("/ q2 /: uid" no roteamento:
E adicionou isso como um campo oculto para passar parâmetros entre as páginas do formulário da web
<< tipo de entrada = "oculto" necessário ng-model = "formData.userid" ng-init = "formData.userid = uid" />
Sou novo no Angular, então não tenho certeza que é a melhor solução possível, mas parece funcionar bem para mim agora
fonte
Atribua diretamente o valor ao modelo no
data-ng-value
atributo Como o intérprete Angular não reconhece campos ocultos como parte do ngModel.fonte
Eu uso um javascript clássico para definir valor para entrada oculta
fonte
Abaixo, o Code funcionará para este IFF na mesma ordem em que é mencionado. é isso aí.
fonte
Aqui eu gostaria de compartilhar meu código de trabalho:
fonte