我在填充输入值数组时遇到问题。我想我知道为什么,但我似乎无法绕过它。
为数组中名为 selectedAttributes [] 的每个项目创建一个输入元素。我希望将每个input元素的值与属性一起存储到NEW对象中,从而创建一个hash / map。
现有数组: selectedAttributes [" attribute1",...." attribute_N"]
目标:
{attribute1:'inputValue1', attribute2:'inputValue2'...}
到目前为止,HTML不起作用
<tbody>
<tr ng-repeat="attribute in selectedAttributes">
<td><a>{{attribute}}</a></td>
<td> ---> </td>
<td><input ng-model="formFields.attribute" class="field" id="{{attribute}}" type="text" > </td>
</tr>
</tbody>
如果这不可能,我认为可以将输入值存储到数组中,然后将selectedAttributes []与输入值列表结合起来,但我更愿意避免这种情况。
谢谢!
答案 0 :(得分:1)
我不确定我是否理解你的问题。但是在这里你可以看到如何动态添加字段。也许有帮助 Angularjs adding dynamically form fields in various forms
答案 1 :(得分:1)
您是否尝试过使用ng-model formFields [attribute]
答案 2 :(得分:0)
您需要一个事件来调用函数来将新值保存到数组中。
这是一个例子。
http://plnkr.co/edit/wibVbsesfahxmvfLpJ4H
编辑:
添加了一个指令,以便您可以通过单击按钮或在值字段中输入key来保存新条目。
答案 3 :(得分:0)
答案是下面两个答案的组合,但两者都非常有助于我解决这个问题。现在我明白发生了什么,这真是太明显了,所以如果有人认为我足够聪明,我会道歉。我需要使用属性的空值初始化对象,然后使用formFields [attribute]将输入值绑定到attribute_N。
我认为问题是什么(希望在此确认/更正): ng-repeat为selectedAttributes数组中的每个项创建一个新的输入元素,这是好的,但它也为每一行创建一个新的范围。因此ng-model绑定到当前范围。这意味着如果您在ng-model = formFields中存储任何内容,则下一个范围将创建一个新的formFields并添加新范围的值。
此外,如果您从未定义过模型&#34;&#34;键入&#34; (数组与对象)我认为角度没有做任何假设所以它只是抛出&#34; undefined&#34;如何将值存储到模型中是安全的。
<强>解决方案强> 因此,您可以直观地在控制器中创建模型,并在视图进入时动态初始化类型和推送值。
一个。在控制器中,使用地图中键的空值初始化新对象。
$scope.formFields = {};
湾现在该对象具有键,因此我们可以使用对象[键]方法将输入字段的值与ng-model绑定到键。
<tbody>
<tr ng-repeat="attribute in selectedAttributes">
<td><a>{{attribute}}</a></td>
<td> ---> </td>
<td><input ng-model="formFields[attribute]" class="field" id="{{attribute}}" type="text" > </td>
</tr>
</tbody>
我不会作为答案标记,因为我希望最佳实践作为未来民众和我自己的答案。
这是不好的做法吗?为什么或者为什么不?什么更好?