Javascript 角度存储将输入值重复到模型中
我在填充输入值数组时遇到问题。我想我知道为什么,但我似乎无法回避 为名为SelectedAttribute[]的数组中的每个项创建一个输入元素。我希望每个输入元素的值和属性一起存储到一个新对象中,从而创建一个哈希/映射 现有数组:所选属性[“属性1”,“属性N”] 目标: 到目前为止,HTML不起作用Javascript 角度存储将输入值重复到模型中,javascript,angularjs,Javascript,Angularjs,我在填充输入值数组时遇到问题。我想我知道为什么,但我似乎无法回避 为名为SelectedAttribute[]的数组中的每个项创建一个输入元素。我希望每个输入元素的值和属性一起存储到一个新对象中,从而创建一个哈希/映射 现有数组:所选属性[“属性1”,“属性N”] 目标: 到目前为止,HTML不起作用 <tbody> <tr ng-repeat="attribute in selectedAttributes"> <t
<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>
{{attribute}}
--->
如果这是不可能的,我认为可以将输入值存储到数组中,然后将selectedAttributes[]与输入值列表结合起来,但我宁愿避免这样做
谢谢 我不确定我是否理解你的问题。但这里是您可以看到如何动态添加字段。也许有用
您是否尝试在ng模型中使用formFields[属性]您将需要一个事件来调用函数以将新值保存到数组中 这里有一个例子 编辑:
添加了一个指令,以便您可以通过单击按钮或通过值字段中的enter键保存新条目。答案是下面两个答案的组合,但这两个答案都非常有助于我解决此问题。很明显,现在我明白发生了什么,所以如果有人认为我足够聪明,我道歉。我需要用属性的空值初始化对象,然后使用formFields[attribute]将输入值绑定到属性 我认为问题在于(希望在此确认/更正): ng repeat为selectedAttributes数组中的每个项目创建一个新的输入元素,这很好,但它也为每一行创建一个新的范围。所以ng模型绑定到当前范围。这意味着,如果在ng model=formFields中存储任何内容,则下一个作用域将创建新的formFields并添加新作用域的值 此外,如果您从未定义模型的“类型”(数组与对象),我认为angular不会做出任何假设,因此它只会抛出“undefined”,以便安全地将值存储到模型中 解决方案 因此,直观地说,您应该首先在控制器中创建模型,初始化类型,并在值进入时从视图中动态推送值 a。在控制器中,使用映射中键的空值初始化新对象
$scope.formFields = {};
b。现在,对象具有键,因此我们可以使用ng模型将输入字段的值绑定到使用object[key]方法的键
<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>
{{attribute}}
--->
我将避免将答案作为标记,因为我希望为未来的人和我自己提供一个最佳实践答案
这种做法不好吗?为什么?什么更好?那不行。formFields[attribute]正在访问key=attribute的值。这是不存在的,因为formFields还没有被创建,当它创建时,它将没有任何值,这就是我要做的。我试着储存而不是阅读。我需要像formFields[index]=inputValue这样的东西。
<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>