选择JSON对象的子集&数它

时间:2014-03-12 01:02:04

标签: javascript angularjs checkbox filter

我在这里度过了一段难忘的时光,可能是因为我对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对象变成纯数组,但也许不是......

感谢任何建议或帮助。

1 个答案:

答案 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数组,可以像范围变量一样访问它。