提问者:小点点

AngularJS不发送隐藏字段值


对于一个特定的用例,我必须以“老方法”提交一个单一的表单。意思是,我使用带有action=“”的表单。响应是流式的,所以我不会重新加载页面。我完全知道一个典型的AngularJS应用程序不会以这种方式提交表单,但到目前为止我没有其他选择。

话虽如此,我试着从Angular填充一些隐藏的字段:

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

请注意,数据中的正确值已显示。

表单看起来像标准表单:

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

如果点击submit,则不会向服务器发送任何值。如果我将输入字段改为键入“text”,它就会像预期的那样工作。我的假设是隐藏字段没有真正填充,而文本字段实际上是由于双向绑定而显示的。

有什么想法可以提交一个由AngularJS填充的隐藏字段吗?


共2个答案

匿名用户

不能使用隐藏字段的双重绑定。解决方法是使用括号:

<input type="hidden" name="someData" value="{{data}}" /> {{data}}

编辑:请参阅github上的此线程:https://github.com/angular/angular.js/pull/2574

编辑:

从Angular 1.2开始,您可以使用'ng-value'指令将表达式绑定到input的value属性。此指令应与输入无线电或复选框一起使用,但与隐藏输入一起工作很好。

下面是使用ng-value的解决方案:

<input type="hidden" name="someData" ng-value="data" />

下面是一个使用ng-value和隐藏输入的小提琴:http://jsfiddle.net/6sd9n

匿名用户

您可以始终使用type=textdisplay:none;,因为Angular忽略隐藏元素。正如OP所说,通常情况下你不会这么做,但这似乎是一个特例。

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