javascript - Angular - 如何显示结果,只有在未选中的情况下

标签 javascript html angularjs checkbox angularjs-filter

我有代码可以过滤并显示选中框的结果。当所有复选框都未选中时,它会显示所有结果,当复选框被选中时,它只显示选中的框。

但是,我试图在未选中复选框时显示所有结果,如果选中复选框则不会显示该特定结果,同时继续显示未选中的框。

Controller .js

function AdvisorListCtrl( $location, $scope, db) {

    $scope.orderProp = 'number';
    $scope.courseCheckboxes = {};
    $scope.teacherCheckboxes = {};
    $scope.courses = db.courses.query({order:$scope.orderProp, name:$scope.query});

    function getChecked(obj){
        var checked = [];
        for(var key in obj)
            if(obj[key]) checked.push(key);
        return checked;
    }

    $scope.searchFilter = function(row){
        var courChecked = getChecked($scope.courseCheckboxes);
        var teachChecked = getChecked($scope.teacherCheckboxes);
        if (courChecked.length == 0 && teachChecked.length == 0)
            return true;
        else {
            if ($scope.courseCheckboxes[row.name])
                return true;
            else {
                return row.teacher.split(/,\s*/).some(function(teach){
                    return $scope.teacherCheckboxes[teach];
                });
            }
        }

    }
}

html

<li><b><h2>Filter by Class</h2></b></li>
<li ng-repeat="course in courses | orderBy:['-status', 'name']">
    <label>
        <input type="checkbox" ng-model="courseCheckboxes[course.name]" />{{course.name}}
    </label>
</li>

最佳答案

我误解了你的问题,所以我重新编辑了答案。

当 searchFilter(record) 返回 false 时,记录被过滤掉(并且不显示)。

这是过滤器的一个版本,它应该做与之前相反的事情(隐藏选中的商家,以及包含选中品牌的商家)。希望这会有所帮助。

html

<div ng-repeat="record in records | filter: searchFilter">
{{record.Description}}

js

$scope.searchFilter = function(row){
  var mercChecked = getChecked($scope.merchantCheckboxes);
  var brandChecked = getChecked($scope.brandCheckboxes);
  if(mercChecked.length == 0 && brandChecked.length == 0)
    return true;
  else{
    if($scope.merchantCheckboxes[row.MerchantName]){
      return false;  // <----------------- changed here true to false
    } else {
      // changed here adding ! 
      return !row.BrandList.split(/,\s*/).some(function(brand){
        return $scope.brandCheckboxes[brand];
      });
    }
  }
};

关于javascript - Angular - 如何显示结果,只有在未选中的情况下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20447403/

相关文章:

javascript - 如何连接一些函数以获得结果

javascript - 移动设备上的 HTML5 视频行为

javascript - 如何根据查询返回选择html下拉列表

angularjs - 从 0.10 升级到 0.11 版本时,Angular UI Bootstrap 日期选择器弹出窗口不起作用

javascript - 类型错误 : 'undefined' is not a constructor (evaluating 'new JdRes())

angularjs - 如何使 angular ui 中的轮播指示器使用 Controller 中模型的缩略图?

javascript 翻转图像 -(如何)我可以为 onmouseover 图像设置 css 样式?

javascript - 满足特定条件时自动选中复选框

javascript - "FizzBuzz"样式代码的错误答案

php - IE11 CSS动画问题