AngularJS:如何在过滤时忽略空值?

时间:2018-08-17 19:05:48

标签: angularjs angularjs-filter

我正在尝试过滤For Each prop In Selection.ShapeRange(1).Properties Debug.Print prop.Name Next ,但是此表中有许多空值,我该如何忽略这些空字段并仅从不为空的文件中搜索/过滤

instructor_name

并且因为有很多字段为空,所以我收到了错误

  

TypeError:无法读取null的属性“ instructor_name”

 filter:

 `item.instructor_name.toLowerCase().indexOf($scope.courses_search.toLowerCase()) != -1`

2 个答案:

答案 0 :(得分:0)

您正在将item与null进行比较,但是如果item未定义,则会进行下一次验证,因为(undefined!== null),因此它将尝试在undefined上查找教师名称,这显然行不通。

AngularJS拥有自己的检查器,angular.isDefined()和angular.isUndefined()。您可以使用其中之一,也可以进行稍微不同的检查,例如:

if (item && item.instructor_name) ...

如果您使用lodash,则可以执行以下操作:     如果(_.get(item,'instructor_name'))...

答案 1 :(得分:-1)

一种选择是在控制器上添加过滤器并从那里处理空检查。 请记住在应用toLowerCase()方法之前检查该值是否已定义。

$scope.filterFunc = function() {
  return function(item) {
    if (typeof $scope.courses_search !== 'undefined' && item !== null) {
        if(typeof item.subject_cd !== 'undefined'){
            return item.subject_cd.toLowerCase().indexOf($scope.courses_search.toLowerCase()) != -1;
        }
        if(typeof item.acad_group !== 'undefined'){
            return item.acad_group.toLowerCase().indexOf($scope.courses_search.toLowerCase()) != -1;
        }
    }
    return false;
  };
};

然后查看

ng-repeat="item in items | filter:filterFunc"