如何在过滤列表为空时显示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设置一个计数器,通过每次迭代和递增递减实施的解决方案------------
每次当我从列表中删除一个项目。
如果我的理解正确,您想要检测您的列表中的所有用户都有否报告并显示消息的情况。如果是这种情况,我认为您需要诉诸控制器的功能,因为ng-if
和ng-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}}
当我在中输入内容时,你的代码会起作用,但是当我在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>
你能分享你的用户数据是怎么样的吗? –
我对你想要完成的事情感到困惑,但我想我现在已经明白了。看看我提供的答案是否解决了这个问题。 – Lex