本篇主要整理使用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过滤排序思路的更多相关文章

  1. ch7-列表渲染(v-for key 数组更新检测 显示过滤/排序结果)

    1 说明 我们用 v-for 指令根据一组数组的选项列表进行渲染. v-for 指令需要以 item in items 形式的特殊语法, items 是源数据数组并且 item 是数组元素迭代的别名. ...

  2. Vue数组更新及过滤排序

    前面的话 Vue为了增加列表渲染的功能,增加了一组观察数组的方法,而且可以显示一个数组的过滤或排序的副本.本文将详细介绍Vue数组更新及过滤排序 变异方法 Vue 包含一组观察数组的变异方法,它们将会 ...

  3. DRF 过滤排序分页异常处理

    DRF 中如何使用过滤,排序,分页,以及报错了如何处理?10分钟get了~

  4. AngularJS如何使用ngRepeat过滤排序

    NG重复指令,带过滤器,像这样: <li ng-repeat="item in items | orderBy:'order_prop' | filter:query | limitT ...

  5. angularjs 字段排序 多字段排序

    我们用angularjs {{}},ng-model循环绑定数组或对象的内容的时候,有时候会用到排序,有时候可能会有多个字段排序 具体要用到过滤 数据的展现,可以通过ng-repeat实现.当网页解析 ...

  6. 三 drf 认证,权限,限流,过滤,排序,分页,异常处理,接口文档,集xadmin的使用

    因为接下来的功能中需要使用到登陆功能,所以我们使用django内置admin站点并创建一个管理员. python manage.py createsuperuser 创建管理员以后,访问admin站点 ...

  7. drf07 过滤 排序 分页 异常处理 自动生成接口文档

    4. 过滤Filtering 对于列表数据可能需要根据字段进行过滤,我们可以通过添加django-fitlter扩展来增强支持. pip install django-filter 在配置文件sett ...

  8. day74:drf:drf其他功能:认证/权限/限流/过滤/排序/分页/异常处理&自动生成接口文档

    目录 1.django-admin 2.认证:Authentication 3.权限:Permissions 4.限流:Throttling 5.过滤:Filtering 6.排序:OrderingF ...

  9. DRF之过滤排序分页异常处理

    一.过滤 对于列表数据要通过字段来进行过滤,就需要添加 django-filter 模块 使用方法: # 1.注册,在app中注册 settings.py INSTALLED_APPS = [ 'dj ...

随机推荐

  1. Android: 详解触摸事件如何传递

    当视图的层次结构比较复杂的时候,触摸事件的响应流程也变得复杂. 举例来说,你也许有一天想要制作一个手势极其复杂的 Activity 来折磨你的用户,你经过简单思索,认为其中应该包含一个 PageVie ...

  2. CMT跟踪算法学习笔记(一)

    关于这个算法,已经有网友写出笔记. 这位网友用画图的方式总结出了算法的各个流程,并总结了源码中的各个类:http://blog.csdn.net/roamer_nuptgczx/article/det ...

  3. jdk678910新特性地址

    jdk678910新特性地址 https://blog.csdn.net/f641385712/article/details/81289401 每篇一句:每个人受到的尊重从来都不是应得的,而是赢得的 ...

  4. laravel 辅助函数

    数组&对象 1.array_divide() array_divide 函数返回两个数组,一个包含原始数组的健,另一个包含原始数组的值 [$keys, $values] = array_div ...

  5. 使用 JavaScript 编写优化算法 (1)

    之前一直用Python来写优化算法,为了增强 JS 的熟练程度,开始将原有的代码改写成 JS.采用的工具包括 node.js + Grunt + nodeunit + github + npm + t ...

  6. USING NHIBERNATE WITH MySQL

    In previous USING NHIBERNATE WITH SQLITE, we connect SQLITE with ORM framework NHibernate. One of th ...

  7. php实现https(tls/ssl)双向认证

    php实现https(tls/ssl)双向认证 通常情况下,在部署https的时候,是基于ssl单向认证的,也就是说只要客户端认证服务器,而服务器不需要认证客户端. 但在一些安全性较高的场景,如银行, ...

  8. 【LOJ】#2081. 「JSOI2016」反质数序列

    题解 我居然都没反应过来二分图内选集合两两不能有边是最大独立集了 我退役吧 显然连边只能在奇数和偶数之间,然后二分图求最大独立集是节点数-最大匹配数 啊当然还有对于1的话只能留一个1 代码 #incl ...

  9. js 高阶函数(map/reduce/filter/sort)

    1.map - 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值(注:map不会对空数组进行检测,不会改变原始数组) 语法:array.map(function(currentValu ...

  10. 常见Java库漏洞汇总

    1.ActiveMQ 反序列化漏洞(CVE-2015-5254) ref:https://www.nanoxika.com/?p=408 Apache ActiveMQ是美国阿帕奇(Apache)软件 ...