我有一个带有以下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项目。
如何修改代码以仅获取已过滤的项目?此外,我不必输入过滤条件,因此在过滤条件中未输入任何内容时,它应该可以正常工作。
答案 0 :(得分: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);
&#13;
现在只移动过滤的项目。