AngularJS过滤排序思路
本篇主要整理使用AngularJS进行过滤排序的思路。
在controller中,$scope的persons字段存储数组。
$scope.persons = [
{
"name": "aa",
"email": "aaemail",
"birthdate": "2015-03-23T18:00:37-07:00",
"phonenumber": "aaphonenumber",
"address": "aaaddress",
"city": "aacity",
"country": "China"
},
...
];
过滤
用2个文本框,一个输入和name有关,一个输入和email有关,如何实现过滤?
过滤内置函数filter接受对象。
→ 在controller中定义个对象
$scope.search = {};
→ filter条件为search对象
ng-repeat="person in persons | filter: search"
→ 搜索文本框和search.name或search.email绑定
<input type="text" ng-model="search.name" type="text" />
<input type="text" ng-model="search.email" type="text" />
用1个文本框,对任意属性搜索,如何实现?
过滤内置函数filter接受对象。
→ 在controller中定义个对象
$scope.search = {};
→ filter条件为search对象
ng-repeat="person in persons | filter: search"
→ 搜索文本框和search.$绑定
ng-model="search.$"
search.$表示可以是集合对象的任意属性,只要输入的符合集合对象任意一个属性值,filter就返回true。
用1个文本框,定义搜索的属性,比如可以搜索name, 也可以搜索name加email等等,如何实现?
过滤内置函数filter接受返回bool类型的函数。
→ filter接受函数
ng-repeat="person in persons | filter: sensitiveSearch"
注意,这里sensitiveSearch函数接收person实参。
→ 在controller中定义sensitiveSearch方法
$scope.search="";
$scope.sensitiveSearch = function(person){
if($scope.search){
return person.name.indexOf($scope.search) == 0 ||
person.email.indexOf($scope.search) == 0;
}
return true;
};
→ 搜索框绑定search属性
<input type="text" ng-model="search" />
排序
隐式排序,没有界面交互
内置排序函数orderBy接受某个属性。
ng-repeat="person in persons | filter: sensitiveSearch | orderBy:'email'"
ng-repeat="person in persons | filter: sensitiveSearch | orderBy:'-email'"
email表示升序排列,-emial相反。
显式排序,有界面交互,在界面上选择排序字段以及升序和降序,通过select选择排序字段
→ controller的$scope中
$scope.order = "email";
→ orderBy使用order字段
ng-repeat="person in persons | filter: sensitiveSearch | orderBy:order"
→ 界面select与order字段绑定
<select class="form-control" ng-model="order">
<option value="name">Name(asc)</option>
<option value="-name">Name(desc</option>
<option value="email">Email(asc)</option>
<option value="-email">Email(desc</option>
</select>
显式排序,有界面交互,在界面字段旁加按钮,选择升序或降序
→ controller的$scope中
$scope.order = "email";
→ orderBy使用order字段
ng-repeat="person in persons | filter: sensitiveSearch | orderBy:order"
→ 界面
在name字段旁加升序降序按钮:
ng-click="order = 'name'"
ng-click="order = '-name'"
在email字段旁加升序降序按钮:
ng-click="order = 'email'"
ng-click="order = '-email'"
点击行事件
让当前行变换背景色,并把当前行的详细信息在某处显示出来。
→ 给当前行添加点击事件
<tr ng-repeat="person in persons | filter: sensitiveSearch | orderBy:order"
ng-style="{'background-color': person.email == selectedPerson.email ? 'lightgray':''}"
ng-click="selectPerson(person)">
ng-style接受一个对象,设置样式。
→ 在controller中定义selectPerson
$scope.selectedPerson = null;
$scope.selectPerson = function (person) {
$scope.selectedPerson = person;
};
→ 在界面的某处显示该行的详细信息
{{selectedPerson.name
{{selectedPerson.email}}
{{selectedPerson.birthdate | date: "longDate"}}
{{selectedPerson.address}}
{{selectedPerson.city}}
{{selectedPerson.country}}
搜索不到结果的处理方式
当搜索框内输入一个值,有可能是没有匹配结果。如何在没有搜索结果的时候,界面给到一个提示?
→ 把过滤排序后的结果赋值一个变量
ng-repeat="person in filteredPersons = (persons | filter: sensitiveSearch | orderBy:order)"
→ 界面某处
<tr ng-show="filteredPersons.length == 0">
<td colspan="4">
<div class="alert alert-info">
<p class="text-center">
No results found for search term '{{search}}'
</p>
</div>
</td>
</tr>
当filteredPersons所代表的搜索结果为空时,显示该区域信息。
以上只是局限在客户端的过滤和排序,如果和服务端结合起来,又另当别论了。
AngularJS过滤排序思路的更多相关文章
- ch7-列表渲染(v-for key 数组更新检测 显示过滤/排序结果)
1 说明 我们用 v-for 指令根据一组数组的选项列表进行渲染. v-for 指令需要以 item in items 形式的特殊语法, items 是源数据数组并且 item 是数组元素迭代的别名. ...
- Vue数组更新及过滤排序
前面的话 Vue为了增加列表渲染的功能,增加了一组观察数组的方法,而且可以显示一个数组的过滤或排序的副本.本文将详细介绍Vue数组更新及过滤排序 变异方法 Vue 包含一组观察数组的变异方法,它们将会 ...
- DRF 过滤排序分页异常处理
DRF 中如何使用过滤,排序,分页,以及报错了如何处理?10分钟get了~
- AngularJS如何使用ngRepeat过滤排序
NG重复指令,带过滤器,像这样: <li ng-repeat="item in items | orderBy:'order_prop' | filter:query | limitT ...
- angularjs 字段排序 多字段排序
我们用angularjs {{}},ng-model循环绑定数组或对象的内容的时候,有时候会用到排序,有时候可能会有多个字段排序 具体要用到过滤 数据的展现,可以通过ng-repeat实现.当网页解析 ...
- 三 drf 认证,权限,限流,过滤,排序,分页,异常处理,接口文档,集xadmin的使用
因为接下来的功能中需要使用到登陆功能,所以我们使用django内置admin站点并创建一个管理员. python manage.py createsuperuser 创建管理员以后,访问admin站点 ...
- drf07 过滤 排序 分页 异常处理 自动生成接口文档
4. 过滤Filtering 对于列表数据可能需要根据字段进行过滤,我们可以通过添加django-fitlter扩展来增强支持. pip install django-filter 在配置文件sett ...
- day74:drf:drf其他功能:认证/权限/限流/过滤/排序/分页/异常处理&自动生成接口文档
目录 1.django-admin 2.认证:Authentication 3.权限:Permissions 4.限流:Throttling 5.过滤:Filtering 6.排序:OrderingF ...
- DRF之过滤排序分页异常处理
一.过滤 对于列表数据要通过字段来进行过滤,就需要添加 django-filter 模块 使用方法: # 1.注册,在app中注册 settings.py INSTALLED_APPS = [ 'dj ...
随机推荐
- python3之模板pycurl探测web服务质量
1.pycurl简介 pycURL是libcurl多协议文件传输库的python接口,与urllib模块类似,PycURL可用于从python程序中获取由URL标识的对象,功能很强大,libcurl速 ...
- Android 5.0 API
Android 5.0 (LOLLIPOP) 为用户和应用开发者提供了新功能.本文旨在介绍其中最值得关注的新 API. 如果您有已发布的应用,请务必看一看 Android 5.0 行为变更,了解您的应 ...
- Linux系统产生随机数/dev/random 和 /dev/urandom
1. 基本介绍 /dev/random和/dev/urandom是Linux系统中提供的随机伪设备,这两个设备的任务,是提供永不为空的随机字节数据流.很多解密程序与安全应用程序(如SSH Keys, ...
- LeetCode(22):括号生成
Medium! 题目描述: 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n = 3,生成结果为: [ "((()))", ...
- Linux 基础——权限管理命令chmod
一.Linux中的文件权限与目录权限 Linux中定义了3种访问权限,分别是r.w.x.其中r表示对象是可读的,w表示对象是可写的,x表示对象是可执行的,这3种权限组成一组rwx分别对应对象的3个安全 ...
- Windows 10安装pip方法
pip是一款非常方便的python包管理工具,本文主要介绍在windows 10下安装pip方法. 1. 下载pip 地址:https://pypi.python.org/pypi/pip#downl ...
- Ubuntu编译gdb-ARM调试环境
参考Qt可用的gdb编译,以及交叉编译gdbserver,以及配置QtCreator远程调试 编译脚本 如下: #!/bin/bash echo -e "\033[32m 正在执行步骤一:检 ...
- 【LOJ】#2109. 「JLOI2015」骗我呢
题解 我深思熟虑许久才算是明白个大概的计数问题吧 先是转化成一个矩形,列一条直线y = x,y = x - (m + 1)我们从(0,0)走到(n + m + 1,m + 1)就是答案 因为我们起始相 ...
- MySQL的lock tables和unlock tables的用法(转载)
早就听说lock tables和unlock tables这两个命令,从字面也大体知道,前者的作用是锁定表,后者的作用是解除锁定.但是具体如何用,怎么用,不太清楚.今天详细研究了下,总算搞明白了2者的 ...
- Ubuntu16.04 14.04 配置caffe(CPU only)
1.安装依赖 sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-seria ...