角度存储ng-重复输入值到模型中

时间:2014-03-22 22:00:12

标签: javascript angularjs

我在填充输入值数组时遇到问题。我想我知道为什么,但我似乎无法绕过它。

为数组中名为 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 []与输入值列表结合起来,但我更愿意避免这种情况。

谢谢!

4 个答案:

答案 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>

我不会作为答案标记,因为我希望最佳实践作为未来民众和我自己的答案。

这是不好的做法吗?为什么或者为什么不?什么更好?