我在这里度过了一段难忘的时光,可能是因为我对Angular很新,而且我还没有完成任何事情。
首先是场景,然后希望有些代码:
我有一个从API调用中获取JSON对象的按钮。它变成了$ scope.collectors。
$http.post('get', $scope.formData).success(function(data) {
$scope.collectors = data.results;
...
然后我接受并使用复选框列出这些项目的大清单,以便您可以选择要使用的项目。当您选择了所需的那些时,您可以单击另一个按钮来收集所有这些,并批量操作它们。
这就是整个故事。他们遇到麻烦的任务是双重的。首先,我只是想计算检查项目的数量。我这样做了:
JS:
$scope.selectedCollectors = {};
HTML:
<div ng-repeat="collector in collectors">
<input type="checkbox" name="collector-id"
value="{{collector.id}}"
ng-model="selectedCollectors[collector.id]">
</div>
<p>Debug: {{ selectedCollectors }}</p>
<p>There are {{ selectedCollectors.length }} items checked</p>
当我选择项目时,selectedCollectors的输出符合预期:
{"8596784":true,"7458347":true}
但是{{selectedCollectors.length}}永远不会增加或显示任何内容。
第二件事基本上我正在尝试做的是根据用户选择获取原始JSON对象的子集。除了循环遍历$ scope.collectors中的每个项目并将ID与selectedCollectors中的ID进行比较之外,还有更好的Angular-ish方法来获取此子集吗?
有些东西让我觉得我应该把这个JSON对象变成纯数组,但也许不是......
感谢任何建议或帮助。
答案 0 :(得分:1)
这是我的解决方案。 http://jsfiddle.net/wittwerj/962wm/
首先,我让角度添加一个&#34;选择&#34;被检查的收集器对象的属性:
<div ng-repeat="collector in collectors">
<input type="checkbox" name="collector-id" value="{{collector.id}}"
ng-model="collector.selected" />
</div>
然后第二次ng-repeat创建所选收集器(see this question)的过滤子集:
<div ng-repeat="collector in (selectedCollectors = (collectors | filter:{selected: true}))">
请注意,第二个ng-repeat没有生成任何标记 - 只是selectedCollectors数组,可以像范围变量一样访问它。