如何应用带过滤器的ng if来过滤记录,并在同一页面中显示两个不同的视图
How to apply ng-if with filter for filtering records and present two different views in the same page?
我是AngularJS的新手,正在从这里学习,但我一直在做下面的实验。
我有以下数据:
var people = ([
{
id: 1,
name: "Peter",
age: 21},
{
id: 2,
name: "David",
age: 10},
{
id: 3,
name: "Anil",
age: 22}
]);
我想做的是,如果年龄大于20,那么我必须显示所有三个字段(即id、姓名、年龄)
ID Name Age
1 Peter 21
3 Anil 22
如果年龄小于20,,则只会出现2个字段(例如id、name)
ID Name
2 David
到目前为止我尝试了什么
app.js
var myApp=angular.module('myApp', []);
myApp.controller('PeopleCtrl', function($scope,$window) {
$scope.people = ([
{
id: 1,
name: "Peter",
age: 21},
{
id: 2,
name: "David",
age: 20},
{
id: 3,
name: "Anil",
age: 22}
])
});
index.html
<!DOCTYPE html>
<html>
<head>
<script data-require="angular.js@1.4.0-beta.6" data-semver="1.4.0-beta.6" src="https://code.angularjs.org/1.4.0-beta.6/angular.js"></script>
<script src="app.js"></script>
</head>
<body>
<div ng-app="myApp" ng-controller="PeopleCtrl">
<table border="1" >
<tr>
<th>Id</th>
<th>Name</th>
<th>Age</th>
</tr>
<tr ng-repeat="person in people" >
<td><span>{{person.id}}</span></td>
<td><span>{{person.name}}</span></td>
<td><span>{{person.age}}</span></td>
</tr>
</table>
</div>
</body>
</html>
我在网上学习了一些教程,发现了ng-if-的概念,这将有助于与过滤器一起做到这一点。(我想是的……如果我走错了方向,请纠正我)
但我不能把它放在应用程序中。
此外,我想显示同一页面中的记录(即index.html)
为此寻求帮助。
Plunker:http://plnkr.co/edit/hLaw38fCMaclrHiaCH3X?p=preview
如下所示。
标记
<tr ng-repeat="person in people| filter: search">
<td><span>{{person.id}}</span></td>
<td><span>{{person.name}}</span></td>
<td ng-if="person.age<20"><span>{{person.age}}</span></td>
</tr>
工作Plunkr
编辑1
你将需要创建额外的过滤器,这将给你的过滤器内容有20人以下或没有。
标记
<table border="1">
<tr>
<th>Id</th>
<th>Name</th>
<th ng-if="(people| filter: search| filter: underTwenty: 20).length > 1">Age</th>
</tr>
<tr ng-repeat="person in people| filter: search">
<td><span>{{person.id}}</span></td>
<td><span>{{person.name}}</span></td>
<td ng-if="person.age<20"><span>{{person.age}}</span></td>
</tr>
</table>
过滤器
myApp.filter('underTwenty', function() {
return function(values, limit) {
var returnValue = [];
angular.forEach(values, function(val, ind) {
if (val.age < limit) returnValue.push(val);
});
return returnValue
}
});
更新的Plunkr
编辑2
根据OP 要求的变更
HTML
<table border="1" ng-init="ageToShow=(people| underTwenty: 20).length >= 1">
<tr>{{ageToShow}}
<th>Id</th>
<th>Name</th>
<th ng-if="!ageToShow">Age</th>
</tr>
<tr ng-repeat="person in people| filter: search">
<td><span>{{person.id}}</span>
</td>
<td><span>{{person.name}}</span>
</td>
<td ng-if="!ageToShow"><span>{{person.age}}</span>
</td>
</tr>
</table>
Plunkr
相关文章:
- 使用Booklet Jquery插件,我如何验证最后一页是否显示
- Javascript并不是显示在每一页上
- 如何在一页上显示多个Highcharts图表
- 一页主题搜索/用下一个按钮突出显示文本
- Angularjs:目录分页控件没有'即使按下页面按钮,也不会显示下一页
- 在表单提交后显示模态,直到加载下一页为止..不适用于狩猎
- 无法在一页上显示多个Highchart
- 计算文本字段的数量&在另一页中显示总数
- 当我们选择页面中的文本框时,在选择该chk框时在另一页中显示一些文本
- 如何在另一页上显示地图并全屏查看
- 有没有什么方法可以避免在谷歌可视化图表的图例中分页,并在一页中用两行显示所有行
- 如何在重定向到另一页之前显示正在加载的图像
- 当点击rails中的提交按钮时,如何在重定向到下一页之前显示模态
- 要显示在另一页上的表单信息
- 在iFrame中显示用户上一页
- 当用户点击链接到下一页的项目时,我如何在网页中显示加载
- jquery Mobile->页面显示,但下一页没有't
- 纵向屏幕有2页,但只能显示其中一页
- 我们可以在下一页显示response.sendRedirect发送的参数吗.如果是,如何
- 要在下一页显示的表单输入