【问题标题】:angularJs - how to get filtered arrayangularJs - 如何获得过滤后的数组
【发布时间】:2016-12-08 13:13:04
【问题描述】:

我有一个带有以下 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 个项目。

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

【问题讨论】:

    标签: javascript html angularjs filter


    【解决方案1】:

    我解决了这个问题 - 结果非常简单。我在顶部添加了以下代码

    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);

    现在只移动过滤的项目。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      • 2012-09-21
      • 2015-09-18
      • 2023-03-13
      • 1970-01-01
      • 2013-03-23
      • 2015-10-27
      相关资源
      最近更新 更多