详解AngularJS 过滤器的使用


Posted in Javascript onJune 02, 2018

考评员综合查询,查询条件有:区域、所在单位、从事专业、资格证名称、有效期至。

详解AngularJS 过滤器的使用

如果我们的所有数据查询都放在后台的话。依据拼接的查询条件,选择区域、所在单位、从事专业查询的是人员表,而选择资格证名称、有效期至查询的是人员资质表。

详解AngularJS 过滤器的使用

查询都放到后台,这种以我们固有的思路去设计是可以实现的。

那就写两个接口,一个根据区域、所在单位、从事专业查询人员表,一个根据资格证名称、有效期至、区域、所在单位、从事专业查询人员资质表。不过是拼接谓语时多join几下罢了。

然后前台监听用户选中的查询条件,根据不同的查询条件去请求相应的接口。

虽然这样可以实现,但是此处的考评员的数量不会很多,我们大可以根据区域、所在单位、从事专业查询人员,OneToMany直接将相应的人员资质带出来,然后再根据用户选中的资格证名称和有效期至作为条件对人员资质进行过滤,在前台过滤出用户想要的数据。

过滤器思路

过滤器,本质就是一个方法,输入什么,然后输出什么。

符合此处需求传入的参数应该为人员,资格证名称,有效期至,然后输出为处理过的人员。

过滤人员的人员资质,可能对于不熟悉本项目的人不容易理解,所以这里以人和电脑为例,一个人,可以有多个电脑,需求是将这个人的不符合过滤条件的电脑从数组中移除。

webApp.filter('yunzhiComputer', function() {
  return function(users, computerName) {
    angular.forEach(users, function(user) {
      angular.forEach(user.computers, function(computer, index) {
        if (computer.name !== computerName) {
          // 如果不符合条件,将该项从数组中移除
          user.computers.splice(index, 1);
        }
      });
    });
    return users;
  };
});
ng-repeat="user in users | yunzhiComputer: 'Mac'"

V层过滤的问题

因为此处的考评员查询需要进行分页,因为数据量较少,所以计划在前台分页。

分页之后,那循环中的users就是我们分页完的人。

假如一共有两页数据,每页十条,第一页有一条符合的,第二页有三条符合的,如果使用者在第一页进行过滤,那最后显示出来的就是一条数据,显示不出第二页符合条件的数据。

C层过滤

原来是先在C层分页,然后在V层进行过滤,为了避免分页引起的数据过滤错误,所以决定将过滤器放到C层使用,先过滤,后分页。

Filter - AngularJS

angular.module('FilterInControllerModule', []).
controller('FilterController', ['filterFilter', function FilterController(filterFilter) {
 this.array = [
  {name: 'Tobias'},
  {name: 'Jeff'},
  {name: 'Brian'},
  {name: 'Igor'},
  {name: 'James'},
  {name: 'Brad'}
 ];
 this.filteredArray = filterFilter(this.array, 'a');
}]);

第一种是AngularJS官方给出的写法,直接过滤器名加上Filter可以直接依赖注入过滤器,例如我们这里的过滤器叫做yunzhiComputer,我们可以直接依赖注入yunzhiComputerFilter

How to use a filter in a controller - StackOverflow

function myCtrl($scope, $filter)
{
  $filter('filtername')(arg1,arg2);
}

这是StackOverflow上给出的写法,我比较喜欢这种写法,毕竟我们写过滤器,为了防止和已有的库冲突,所以我们要将过滤器加上前缀yunzhi,然后还要在命名上大致描述这个过滤器的功能,这就使得过滤器的名称很长,再加上Filter,那就更长了,完全没必要。毕竟$filter中的字符串还是可以让他人去直接粘贴然后Ctrl + P直接查询到这个过滤器。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
可缩放Reloaded-一个针对可缩放元素的复用组件
Mar 10 Javascript
javascript下function声明一些小结
Dec 28 Javascript
jquery事件机制扩展插件 jquery鼠标右键事件。
Dec 26 Javascript
Extjs407 getValue()和getRawValue()区别介绍
May 21 Javascript
浏览器的JavaScript引擎的识别方法
Oct 20 Javascript
javascript删除元素节点removeChild()用法实例
May 26 Javascript
Javascript操作dom对象之select全面解析
Apr 24 Javascript
Angular 2 利用Router事件和Title实现动态页面标题的方法
Aug 23 Javascript
jquery在启动页面时,自动加载数据的实例
Jan 22 jQuery
vue-image-crop基于Vue的移动端图片裁剪组件示例
Aug 28 Javascript
angularJs select绑定的model取不到值的解决方法
Oct 08 Javascript
layui实现鼠标移动到单元格上显示数据的方法
Sep 11 Javascript
简化vuex的状态管理方案的方法
Jun 02 #Javascript
深入了解javascript 数组的sort方法
Jun 01 #Javascript
js 数组详细操作方法及解析合集
Jun 01 #Javascript
vue 中动态绑定class 和 style的方法代码详解
Jun 01 #Javascript
一个简单的node.js界面实现方法
Jun 01 #Javascript
浅析前端路由简介以及vue-router实现原理
Jun 01 #Javascript
Vue中的混入的使用(vue mixins)
Jun 01 #Javascript
You might like
PHP压缩html网页代码(清除空格,换行符,制表符,注释标记)
2012/04/02 PHP
php class中self,parent,this的区别以及实例介绍
2013/04/24 PHP
将word转化为swf 如同百度文库般阅读实现思路及代码
2013/08/09 PHP
php实现读取手机客户端浏览器的类
2015/01/09 PHP
PHP获取毫秒级时间戳的方法
2015/04/15 PHP
Zend Framework数据库操作方法实例总结
2016/12/11 PHP
JavaScipt基本教程之前言
2008/01/16 Javascript
Jquery AutoComplete自动完成 的使用方法实例
2010/03/19 Javascript
JavaScript版TAB选项卡效果实例
2013/08/16 Javascript
JSON+Jquery省市区三级联动
2016/01/13 Javascript
Webpack 实现 AngularJS 的延迟加载
2016/03/02 Javascript
在Docker快速部署Node.js应用的详细步骤
2016/09/02 Javascript
解决ie img标签内存泄漏的问题
2017/10/13 Javascript
vue表单数据交互提交演示教程
2019/11/13 Javascript
JS实现简单的表格增删
2020/01/16 Javascript
vue-quill-editor的使用及个性化定制操作
2020/08/04 Javascript
JavaScript手写数组的常用函数总结
2020/11/22 Javascript
[01:52]2014DOTA2西雅图邀请赛 V社开大会你不知道的小秘密
2014/07/08 DOTA
Python内置的字符串处理函数详细整理(覆盖日常所用)
2014/08/19 Python
Python实现的多线程同步与互斥锁功能示例
2017/11/30 Python
python tools实现视频的每一帧提取并保存
2020/03/20 Python
python列表每个元素同增同减和列表元素去空格的实例
2019/07/20 Python
PyCharm2018 安装及破解方法实现步骤
2019/09/09 Python
Python实现平行坐标图的绘制(plotly)方式
2019/11/22 Python
python实现简单俄罗斯方块
2020/03/13 Python
Python读取配置文件(config.ini)以及写入配置文件
2020/04/08 Python
Win 10下Anaconda虚拟环境的教程
2020/05/18 Python
Python多线程正确用法实例解析
2020/05/30 Python
css3中新增的样式使用示例附效果图
2014/08/19 HTML / CSS
html5 sessionStorage会话存储_动力节点Java学院整理
2017/07/06 HTML / CSS
国际领先的学术出版商:Springer
2017/01/11 全球购物
PHP面试题及答案一
2012/06/18 面试题
编程实现当输入某产品代码则打印出该产品记录的功能
2014/05/03 面试题
讲文明树新风演讲稿
2014/05/12 职场文书
晚自修旷课检讨书怎么写
2014/11/17 职场文书
2015婚礼主持词开场白
2015/05/28 职场文书