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所代表的搜索结果为空时,显示该区域信息。

时间: 2024-10-05 16:24:14

AngularJS过滤排序思路的相关文章

AngularJS 过滤与排序详解及实例代码

这篇文章主要介绍了AngularJS 过滤与排序,实现查询过滤以及排序的功能. 通过这篇文章可以了解到 1. angularjs的过滤器 2. ng-repeat的使用方法 3. 控制器的使用 4. 数据的绑定 首先,如果要是先查询过滤,就要使用到AngularJS中的 过滤器filter 了. 直接在表达式的后面使用管道命令符 | ,按照下面的写法就可以达到一个过滤的效果: {{ persons | filter:query }} 通过使用filter实现过滤操作,query是查询过滤时输入的

angularjs 实现排序功能

实现公式:{{orderBy_expression | orderBy:expression:reverse}} Example <script> var app=angular.module("myApp",[]);    app.controller("Ctrl",function($scope){        $scope.friends=[            {name:"John",phone:'555-1212',a

网络请求参数的处理,包含过滤,排序,拼接,加密

网络请求的参数过滤,排序,拼接,加密.也参考了alipay. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ICE.Common { public class WebCore { /// <summary> /// 除去数组中的空值和签名参数并以字母a到z的顺序排序 /// </sum

AngularJS如何使用ngRepeat过滤排序

NG重复指令,带过滤器,像这样: <li ng-repeat="item in items | orderBy:'order_prop' | filter:query | limitTo:4"></li> orderBy为key值,当然也可以为变量,在controller中可定义该变量值,如: <li ng-repeat="item in items | orderBy:oreder | filter:query | limitTo:4"

Hadoop 使用 MapReduce 排序 思路、全局排序

本文主要讲对key的排序,主要利用hadoop的机制进行排序. 1.Partition partition作用是将map的结果分发到多个Reduce上.当然多个reduce才能体现分布式的优势. 2.思路 由于每个partition内部是有序的,所以只要保证各partition间有序,即可保证全部有序. 3.问题 有了思路,如何定义partition的边界,这是个问题. 解决办法:hadoop提供了一个采样器帮我们预估整个边界,以使数据的分配尽量平均 引用:http://stblog.baidu

drf 其他功能组件 - 限流-过滤-排序-分页-异常处理-生成接口文档-Xadmin

目录 限流Throttling 使用 可选限流类 实例 过滤Filtering 排序 分页Pagination 可选分页器 异常处理 Exceptions REST framework定义的异常 自动生成接口文档 安装依赖 设置接口文档访问路径 文档描述说明的定义位置 访问接口文档网页 Xadmin 安装 使用 限流Throttling 可以对接口访问的频次进行限制,以减轻服务器压力. 一般用于付费购买次数,投票等场景使用. 使用 可以在配置文件中,使用DEFAULT_THROTTLE_CLAS

排序 -- 思路简析(一)

简介 本篇文章总结一下最近学习的排序算法,提炼出其思想及不同之处.有归并排序,快速排序,堆排序以及冒泡排序 归并排序(Merging Sort) 归并是指将两个或两个以上的有序表组合成一个新的有序表. 归并排序是指把无序的的待排序序列分解成若干个有序子序列,并把有序子序列合并为整体有序序列的过程. 长度为1的序列是有序的. 采用两两分解和归并的策略简单易行,这样的归并排序称为2-路归并排序. 归并排序的实现 public static void sort(int[] arr) { if (arr

D21_02_view过滤排序filter orderby

<Window x:Class="demo.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:db="clr-namespace:StoreDatabase;assembly=StoreDatabase&q

排序和过滤

在数据表格展示中,基本上会出现三个元素:排序,过滤(也就是搜索),分页.在这里,我想将这排序和过滤的逻辑处理关系描述一下. 在这里,不考虑在进行排序或过滤操作时,数据处于第几页,在操作完成后,默认回到首页.如果在进行该操作时,已选中一行数据,这又需要另外分析,操作后是否依旧调到该数据所在的页面. 排序: 1.无过滤排序:当前不存在过滤条件(过滤条件为空),排序后,重新按照新的排序规无过滤条件读取数据,展示首页 2.过滤排序:当前已有过滤条件,排序后,重新按照新的排序规则并加上过滤条件读取数据,展