2012-06-24 129 views
15

如何访问angular中的隐藏字段?我有一个应用程序,我希望为列表中的每个项目提交一个表单。表单很简单 - 它具有提交按钮和一个隐藏字段来保存ID值。但它不起作用。该值为空。AngularJs中的隐藏字段

我更新了默认的角度示例以显示情况 - 待办事项文本位于隐藏字段中。

http://jsfiddle.net/tomasfejfar/yFrze/

+0

你能不能让问题的一个简单的例子吗?这里是一个基地的小提琴:http://jsfiddle.net/andytjoslin/DkMyP/ –

+0

当然:http://jsfiddle.net/DkMyP/1/ –

回答

2

在你的简单拨弄,所述问题可通过使用NG-init或设置在控制器的初始值是固定的。 value属性不会影响ng模型。

http://jsfiddle.net/andytjoslin/DkMyP/2/

另外,你最初的例子(http://jsfiddle.net/tomasfejfar/yFrze/)对我的作品在其当前状态在Chrome 15/Windows 7的

+0

但是,只有一次。下一次变量是空的。 –

+0

啊,这是因为在todo例子中'todoText'在'addTodo'函数中被设置为空字符串。显然是 –

+0

!哦,废话! :D谢谢! :D –

8

,如果你想将ng-repeat中的ID传递给您的代码,您不必使用隐藏字段。下面是我所做的:

例如,让我们说我通过电影的集合循环,当你点击“更多”链接,将您的ID传递到您的JS代码:

<ul> 
    <li ng-repeat="movie in movies"> 
    {{movie.id}} {{movie.title}} <a href="#" ng-click="movieDetails(movie)">read more</a> 
    </li> 
</ul> 

然后在你的JS代码中,你可以得到这样的ID:

$scope.movieDetails = function (movie) { 
    var movieID = movie.id; 
} 
+0

太棒了!谢谢 –

2

你可以这样做。
这是一个肮脏的伎俩,但它的工作原理(最喜欢搞鬼;-)
你只需要使用表单名称作为你的隐藏字段
始终把形式ID“形式”

<!doctype html><html ng-app><head> 
<script src="angular-1.0.1.min.js"></script> 
<script> 
function FormController($scope) { 
    $scope.processForm = function() {alert("processForm() called."); 
    $scope.formData.bar = ""; 
    try {$scope.formData.bar = document.getElementById("form").name;} 
    catch(e) {alert(e.message);} 
    alert("foo="+$scope.formData.foo+ " bar="+$scope.formData.bar); 
    }; 
} 
</script></head><body> 
<div ng-controller="FormController"> 
<form name="YourHiddenValueHere" id="form"> 
<input type="text" ng-model="formData.foo" /> 
<button ng-click="processForm()"> SUBMIT </button> 
</form> 
</div></body></html> 

这使您可以将ALL Controller用于所有表格,并将它们发送至ONE服务器脚本。 脚本比由
窗体名称(formData.foo)区分,并知道该怎么做。
隐藏字段命名此场景中的操作。

瞧 - 你跟为
多种形式你想和一个服务器脚本
和所有的人一个的FormController一个完整的应用程序。

0

我必须纠正(提高)自己:
你可以做到这一点更优雅:

<form> 
<input type="text" ng-model="formData.foo" /> 
<input type="hidden" id="bar" value="YourHiddenValue" /> 
<button ng-click="processForm()"> SUBMIT </button> 
</form> 


,然后在JavaScript控制器:

$scope.formData.bar = ""; 
try {$scope.formData.bar = document.getElementById("bar").value;} 
catch(e) {alert(e.message);} 
alert("foo="+$scope.formData.foo+ " bar="+$scope.formData.bar); 


因此,您可以拥有尽可能多的隐藏字段。

13

如果你不想在你的JavaScript文件进行硬编码任何东西,你可以通过AJAX调用它,这样做:

<input type="hidden" name="value" ng-init="model.value=1" value="1"> 

这种方式,你可以保持与JS的表单功能关闭,仍然使用隐藏域在AngularJS

+2

使用:'' 。这种方式更改'model.value'将在输入值中更新。 – GFoley83

+1

不需要为模型值设置隐藏值,因为它不是用户将要更改的内容。在不改变DOM的情况下,模型值可以保留在范围内 – pocesar

+1

如果您想在回发中访问该模型值(或某些插值),该怎么办?那会非常方便。我只是强调隐藏字段的另一个有用的用例。 – GFoley83

0

简单:

<input type="hidden" name="livraisonID" value="{{livraison.id}}"/> 

它的工作原理!

0

请使用NG-绑定= “{{employee.data}}” 这将正常工作##打头##