详解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 相关文章推荐
javascript 尚未实现错误解决办法
Nov 27 Javascript
使用jQuery的attr方法来修改onclick值
Jul 07 Javascript
jquery使用remove()方法删除指定class子元素
Mar 26 Javascript
浅谈关于JavaScript API设计的一些建议和准则
Jun 24 Javascript
理解JS绑定事件
Jan 19 Javascript
微信小程序 Page()函数详解
Oct 17 Javascript
React-Native做一个文本输入框组件的实现代码
Aug 10 Javascript
JS基于for语句编写的九九乘法表示例
Jan 04 Javascript
JavaScript 中 JSON.parse 函数 和 JSON.stringify 函数
Dec 05 Javascript
angular inputNumber指令输入框只能输入数字的实现
Dec 03 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
Feb 03 Javascript
Vue 实现可视化拖拽页面编辑器
Feb 01 Vue.js
简化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
利用PHPExcel实现Excel文件的写入和读取
2017/04/26 PHP
JQuery入门——用映射方式绑定不同事件应用示例
2013/02/05 Javascript
JS关闭窗口或JS关闭页面的几种代码分享
2013/10/25 Javascript
jQuery实现渐变下拉菜单的简单方法
2015/03/11 Javascript
Jquery注册事件实现方法
2015/05/18 Javascript
JavaScript通过事件代理高亮显示表格行的方法
2015/05/27 Javascript
JavaScript每天必学之基础知识
2016/09/17 Javascript
根据Bootstrap Paginator改写的js分页插件
2016/12/25 Javascript
JS实现加载和读取XML文件的方法详解
2017/04/24 Javascript
angularJs的ng-class切换class
2017/06/23 Javascript
webpack中使用iconfont字体图标的方法
2018/02/22 Javascript
Vuex持久化插件(vuex-persistedstate)解决刷新数据消失的问题
2019/04/16 Javascript
VUE:vuex 用户登录信息的数据写入与获取方式
2019/11/11 Javascript
Python2.x和3.x下maketrans与translate函数使用上的不同
2015/04/13 Python
Python基于二分查找实现求整数平方根的方法
2016/05/12 Python
Python3中正则模块re.compile、re.match及re.search函数用法详解
2018/06/11 Python
python寻找list中最大值、最小值并返回其所在位置的方法
2018/06/27 Python
python 使用socket传输图片视频等文件的实现方式
2019/08/07 Python
python切片(获取一个子列表(数组))详解
2019/08/09 Python
python rsync服务器之间文件夹同步脚本
2019/08/29 Python
Python 解决OPEN读文件报错 ,路径以及r的问题
2019/12/19 Python
Python面向对象程序设计之继承、多态原理与用法详解
2020/03/23 Python
python代码实现猜拳小游戏
2020/11/30 Python
HTML5的革新 结构之美
2011/06/20 HTML / CSS
HTML5给汉字加拼音收起展开组件的实现代码
2020/04/08 HTML / CSS
从当地商店送来的杂货:Instacart
2018/08/19 全球购物
Carmen Sol官网:购买果冻鞋、手袋和配件
2021/01/01 全球购物
房地产财务部员工岗位职责
2014/03/12 职场文书
煤矿安全知识竞赛活动总结
2014/07/07 职场文书
工程承包协议书范本
2014/09/29 职场文书
2014年旅游局法制宣传日活动总结
2014/11/01 职场文书
邀请函怎么写
2015/01/30 职场文书
会议主持词开场白
2015/05/28 职场文书
开机音效回归! Windows 11重新引入开机铃声
2021/11/21 数码科技
Python进程间的通信之语法学习
2022/04/11 Python
聊聊CSS粘性定位sticky案例解析
2022/06/01 HTML / CSS