如何在过滤列表为空时显示div(使用ng-repeat使用ng-if进行过滤)

问题描述:

我有一个使用ng-repeat的div,使用ng-if过滤。它的工作正常..所以我需要当列表过滤器返回没有对象时要做出现div如何在过滤列表为空时显示div(使用ng-repeat使用ng-if进行过滤)

股利

<div class="item listItem active" ng-repeat="u in users | filter: inputFilter" ng-if="u.reports.length>0"> 
    Name: {{u.name}} 
    Reports: {{u.reports.length}} 
</div> 

我想显示一条消息,一个div“我们没有报用户呢!”有时我们不会让用户看到报告,所以我需要显示这个div。

PS *我已经使用了搜索..!

------------编辑:改善问题------------

林不使用输入过滤显示列表 名单与所有用户都将在users被加载,但我会用ng-if="u.reports.length>0"

相同的“用户”只显示里面u.reports报告列表中的用户名单将在另一个DIV中使用,所以我不能过滤所有的只显示了PS *名单报告用户。

------------我创建了一个VAR设置一个计数器,通过每次迭代和递增递减实施的解决方案------------

每次当我从列表中删除一个项目。

+0

你能分享你的用户数据是怎么样的吗? –

+0

我对你想要完成的事情感到困惑,但我想我现在已经明白了。看看我提供的答案是否解决了这个问题。 – Lex

如果我的理解正确,您想要检测您的列表中的所有用户都有报告并显示消息的情况。如果是这种情况,我认为您需要诉诸控制器的功能,因为ng-ifng-show对表达式的支持有限。以下是如何编写简单函数的示例,如果任何用户至少有一个报告,则返回true,如果所有用户都有零报告,则返回false。然后,您可以使用ng-if中的功能显示或隐藏该消息。我添加了一个按钮,将报告推送到其中一个用户,以便您可以验证代码是否正确显示并隐藏了适当的消息。

angular.module('app', []) 
 
    .controller('ctrl', function($scope, $filter) { 
 
    $scope.users = [{ 
 
     name: 'Adam', 
 
     reports: [] 
 
    }, { 
 
     name: 'Alan', 
 
     reports: [] 
 
    }, { 
 
     name: 'Allen', 
 
     reports: [] 
 
    }, { 
 
     name: 'Amy', 
 
     reports: [] 
 
    }, { 
 
     name: 'Andrea', 
 
     reports: [] 
 
    }]; 
 

 
    $scope.noUsersWithReports = function() { 
 
     var usersWithReports = $filter('filter')($scope.users, { 
 
     reports: [] 
 
     }); 
 
     return usersWithReports.length === 0; 
 
    } 
 

 
    $scope.reportUser = function(user) { 
 
     $scope.users[$scope.users.indexOf(user)].reports.push({ 
 
     name: 'Fake Report' 
 
     }); 
 
    } 
 
    
 
    $scope.clearReports = function() { 
 
     angular.forEach($scope.users, function(user) { 
 
     user.reports = []; 
 
     }); 
 
    } 
 
    });
div { 
 
    padding: 10px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular.min.js"></script> 
 
<div ng-app="app" ng-controller="ctrl"> 
 
    <div> 
 
    <button ng-repeat="u in users" ng-click="reportUser(u)">Report {{u.name}}</button> 
 
    <button ng-click="clearReports()">Clear All Reports</button> 
 
    </div> 
 
    <div> 
 
    Filter: 
 
    <input type="text" ng-model="listFilter"> 
 
    </div> 
 
    <div ng-repeat="u in users | filter: listFilter as filteredList" ng-if="u.reports.length > 0"> 
 
    Name: {{u.name}} 
 
    <br/>Reports: {{u.reports.length}} 
 
    </div> 
 
    <div ng-if="noUsersWithReports()"> 
 
    We don't have reported users yet! 
 
    </div> 
 
</div>

添加usersFiltered列表,并尝试这一个:

<div class="item listItem active" ng-repeat="u in usersFiltered = (users | filter: inputFilter)" ng-if="usersFiltered.length>0"> 
Name: {{u.name}} 
Reports: {{u.reports.length}} 

+0

当我在中输入内容时,你的代码会起作用,但是当我在ng-if上过滤列表时,将不起作用:/ –

坐落在NG-重复一个新的参数,这将有过滤列表中,那么你可以简单地检查该列表为您的目的!

<div class="item listItem active" ng-repeat="u in filteredUsers =(users| filter:query) " ng-hide="u.reports.length>0"> 
     Name: {{u.name}} 
     Reports: {{u.reports.length}} 
</div> 


<div ng-if="filterdedUsres.length === 0"> 
No user found 
</div>