通过多个条件过滤 ng-repeat,其中一个是严格的

Filter an ng-repeat by multiple criteria with one being strict

我有一个搜索视图,正在尝试按多个条件对其进行过滤。第一种是按 EmployeeName、SupervisorEmployeeName 和 DepartmentName 作为一个组进行过滤,然后按具有两个值的状态下拉列表进行过滤:Active 和 Inactive。对于状态下拉列表,我想使用严格的过滤,因为即使我 select "Active",它也会 return Inactive 因为 Inactive 包含 "active"

<select data-ng-model="employeeFilter.EmployeeStatusName" class="form-control">
    <option selected="selected" value="Active">Active</option>
    <option value="Inactive">Inactive</option>
</select>

<input type="text" data-ng-model="employeeFilter.$" class="form-control" placeholder="Filter search results" />

<tr data-ng-repeat="employeeEntity in employees | filter:employeeFilter | orderBy:sortType:sortReverse">
    <td><a href="#/employee-details/{{employeeEntity.EmployeeNumber}}">{{ employeeEntity.EmployeeNumber }}</a></td>
    <td>{{ employeeEntity.EmployeeName }}</td>
    <td>{{ employeeEntity.SupervisorEmployeeName }}</td>
    <td>{{ employeeEntity.DepartmentName }}</td>
    <td>{{ employeeEntity.EmployeeStatusName }}</td>
</tr>

是否可以直接对一列数据应用严格的标准?

谢谢。

我在这里从用户 maxisam 那里找到了我的解决方案:

Filtering by Multiple Specific Model Properties in AngularJS (in OR relationship)

在我的控制器中,我放置了以下内容:

$scope.filterEmployees = function (row) {
    var filterValue = $scope.searchFilter;
    var returnValue = true;
    if (filterValue !== undefined) {
        var supervisorName = row.SupervisorEmployeeName == null ? '' : row.SupervisorEmployeeName;
        var employeeName = row.EmployeeName == null ? '' : row.EmployeeName;
        var departmentName = row.DepartmentName == null ? '' : row.DepartmentName;
        returnValue =
        (
            angular.lowercase(employeeName).indexOf(angular.lowercase(filterValue)) !== -1 ||
            angular.lowercase(supervisorName).indexOf(angular.lowercase(filterValue)) !== -1 ||
            angular.lowercase(departmentName).indexOf(angular.lowercase(filterValue)) !== -1
        );
    }
    return returnValue;
};

在我的搜索视图中,我有这个:

<div class="col-sm-4">
    <div class="input-group" style="margin-bottom: 20px; width: 250px; float: left">
        <a href="#/employee-post/0" class="btn btn-success">New Employee</a>
        <select data-ng-model="statusFilter" class="form-control">
            <option selected="selected" value="Active">Active</option>
            <option value="Inactive">Inactive</option>
        </select>
    </div>
</div>
<div class="col-sm-4">
    Search results: {{employees.length == null ? '0' : (employees | filter:employeeFilter).length}} items
</div>
<div class="col-sm-4">
    <div class="input-group" style="margin-bottom: 20px; width: 250px; float: right">
        <span class="input-group-addon input-group-addon-default">Filter</span>
        <input type="text" data-ng-model="searchFilter" class="form-control" placeholder="Filter search results" />
    </div>
</div>

 <tr data-ng-repeat="employeeEntity in employees | filter:filterEmployees | filter: { 'EmployeeStatusName' : statusFilter }: true | orderBy:sortType:sortReverse">
    <td><a href="#/employee-details/{{employeeEntity.EmployeeNumber}}">{{ employeeEntity.EmployeeNumber }}</a></td>
    <td>{{ employeeEntity.EmployeeName }}</td>
    <td>{{ employeeEntity.SupervisorEmployeeName }}</td>
    <td>{{ employeeEntity.DepartmentName }}</td>
    <td>{{ employeeEntity.EmployeeStatusName }}</td>
</tr>

EmployeeStatusName 过滤器现在基于严格过滤,而其他所有内容都使用通配符进行评估。我想让它更通用,但至少它有效。