angularJs - 如何获取过滤后的数组

时间:2016-12-08 13:13:05

标签: javascript html angularjs filter

我有一个带有以下html列表的移动指令

<select class="select-list" multiple
                        ng-model="unassigned"
                        name="unAssignedList"
                        data-no-dirty-check
                        ng-options="unassignedItem.descrip for unassignedItem in unassignedItems | orderBy:'descrip' | filter: filterCriteria"></select>

所以,当我使用这个指令时,我可以像这样指定我的过滤条件

<data-sm:duallist-directive ng-required="false" keep-pristine="true"
                                            unassigned-items-title="'@String.Format(Labels.availableX, Labels.items)'"
                                            unassigned-items="currentItemGroup.unassignedItems"
                                            assigned-items-title="'@String.Format(Labels.assignedX, Labels.items)'"
                                            assigned-items="currentItemGroup.assignedItems"
                                            sortable="false"
                                            filter-criteria="{categoryId:selectedCategoryId}"
                                            selected-item="currentItemGroup.selectedItem">
                </data-sm:duallist-directive>

问题在于MoveAllLeft(或MoveAllRight)按钮。他们有以下代码:

$scope.moveRightAll = function() {
                    var unassignedItems = $scope.unassignedItems.slice(0);
                    var smItems = $scope.unassignedItems.slice(0);

                    angular.forEach(smItems, function (value, key) {
                        $scope.assignedItems.push(value);
                        removeItem(unassignedItems, value);
                    });
                    $scope.unassignedItems = unassignedItems;
                    if (!$scope.keepPristine)
                        $scope.form.$setDirty();
                    
                    $scope.assigned = null;
                };

问题是它可以对抗原始的未过滤数组。比方说,如果我总共有642个项目,并且我按类别过滤它们,比如说5,我只想按下我的按钮时移动这5个项目,而不是所有我在屏幕上看不到的642项目。

如何修改代码以仅获取已过滤的项目?此外,我不必输入过滤条件,因此在过滤条件中未输入任何内容时,它应该可以正常工作。

1 个答案:

答案 0 :(得分:1)

我解决了这个问题 - 事实证明这很容易。我在顶部添加了以下代码

&#13;
&#13;
var filteredData ;
                    if ($scope.filterCriteria)
                        filteredData = $filter('filter')($scope.unassignedItems, $scope.filterCriteria);
                    else
                        filteredData = $scope.unassignedItems;

                    var unassignedItems = filteredData.slice(0);
                    var smItems = filteredData.slice(0);
&#13;
&#13;
&#13;

现在只移动过滤的项目。