AngularJS不发送隐藏字段值

Chr*_*ian 191 javascript forms angularjs

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

也就是说,我试图从Angular填充一些隐藏的字段:

<input type="hidden" name="someData" ng-model="data" /> {{data}}
Run Code Online (Sandbox Code Playgroud)

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

表单看起来像标准形式:

<form id="aaa" name="aaa" action="/reports/aaa.html" method="post">
...
<input type="submit" value="Export" />
</form>
Run Code Online (Sandbox Code Playgroud)

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

有关如何提交由AngularJS填充的隐藏字段的任何想法?

Mic*_*ael 287

您不能对隐藏字段使用双重绑定.解决方案是使用括号:

<input type="hidden" name="someData" value="{{data}}" /> {{data}}
Run Code Online (Sandbox Code Playgroud)

编辑:在github上看到这个帖子:https://github.com/angular/angular.js/pull/2574

编辑:

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

以下是使用ng值的解决方案:

<input type="hidden" name="someData" ng-value="data" />
Run Code Online (Sandbox Code Playgroud)

这是一个使用带有隐藏输入的ng值的小提琴:http://jsfiddle.net/6SD9N

  • 大.而且你也可以使用ng-value ="modelName"来做到没有括号. (22认同)
  • 非常感谢.AngularJS IMO中应记录ng模型不能用于隐藏输入的事实. (3认同)
  • 这是正确的,因为Angular 1.2,你可以使用ng-value将表达式绑定到value属性,答案是最新的. (2认同)

tym*_*eJV 46

你可以随时使用a type=text,display:none;因为Angular会忽略隐藏的元素.正如OP所说,通常你不会这样做,但这似乎是一个特例.

<input type="text" name="someData" ng-model="data" style="display: none;"/>
Run Code Online (Sandbox Code Playgroud)


mef*_*ect 8

在控制器中:

$scope.entityId = $routeParams.entityId;
Run Code Online (Sandbox Code Playgroud)

在视图中:

<input type="hidden" name="entityId" ng-model="entity.entityId" ng-init="entity.entityId = entityId" />
Run Code Online (Sandbox Code Playgroud)