【发布时间】:2015-08-25 19:41:37
【问题描述】:
我目前正在创建一个表单,该表单允许用户根据他们选择的功能将新功能添加到他们的集合中。此表单的结构是一个包含复选框和下拉列表的表格。该复选框允许用户选择他们希望添加的功能,下拉菜单允许他们选择他们对该功能的专业水平。
这是表单的 HTML:
<form class="listOfCaps">
<table>
<tbody>
<tr ng-repeat-start="cap in capsarr"></tr>
<tr ng-repeat-start="capname in filteredCaps track by capname.cid"></tr>
<td>
<input type="checkbox" name="selectedCaps[]" value="{{capname}}" ng-model="capname.selected" /> <span>{{capname.capname}}</span>
</td>
<td>
<span class="custom-dropdown custom-dropdown--white">
<select
class="custom-dropdown__select custom-dropdown__select--white"
name = "selectedExp[]"
ng-options = "exp.id as exp.level for exp in expertise"
ng-model = "exp">
<option value="">Select One</option>
</select>
</span>
</td>
<tr ng-repeat-end="capname in cap.capabilities"></tr>
<tr ng-repeat-end="cap in capsarr"></tr>
</tbody>
</table>
</form>
我想要做的是让复选框的值和下拉填充一个数组或更新该数组中的值(如果更改)。我已经尝试过这样做,并且只能将复选框值填充到数组中。我为此使用了 $watch ,因此只要选中它就会添加它,而取消选中它就会被删除。我不知道如何将它应用于同一个 $watch 中的下拉值,以便将这些值添加到数组中的同一个对象中。
这是我的控制器代码:
$scope.expertise = [
{id: '1', level: 'Certified'},
{id: '2', level: 'Knowledgable'},
{id: '3', level: 'Interested'}
];
$scope.selection = [];
$scope.$watch('filteredCaps | filter:{selected:true}', function (newValues) {
$scope.selection = newValues.map(function (capname) {
return {"capname" : capname.capname, "cid": capname.cid};
});
}, true);
注意:filteredCaps 是一个存储在 $scope.filteredCaps 中的数组,来自之前的函数。此数组包含由功能名称和 ID 组成的对象
【问题讨论】:
-
必须是数组吗?您可以使用一个对象,然后在需要时将其转换为数组
-
@JoaoLeal 我想它现在真的不必是一个数组。我指定一个数组的原因是为了以后我想将返回的结果发布到我的数据库时可以循环遍历它。
标签: javascript arrays angularjs checkbox drop-down-menu