详解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 相关文章推荐
原生js实现给指定元素的后面追加内容
Apr 10 Javascript
你必须知道的Javascript知识点之"this指针"的应用
Apr 23 Javascript
Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
Jun 24 Javascript
JQuery+CSS实现图片上放置按钮的方法
May 29 Javascript
Jquery操作cookie记住用户名
Mar 29 Javascript
浅谈js中的三种继承方式及其优缺点
Aug 10 Javascript
JavaScript实现窗口抖动效果
Oct 19 Javascript
详解vue 配合vue-resource调用接口获取数据
Jun 22 Javascript
详解将微信小程序接口Promise化并使用async函数
Aug 05 Javascript
countup.js实现数字动态叠加效果
Oct 17 Javascript
JSONObject与JSONArray使用方法解析
Sep 28 Javascript
如何理解Vue简单状态管理之store模式
May 15 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
教大家制作简单的php日历
2015/11/17 PHP
php注册登录系统简化版
2020/12/28 PHP
php投票系统之增加与删除投票(管理员篇)
2016/07/01 PHP
Yii2创建控制器(createController)方法详解
2016/07/23 PHP
Laravel多用户认证系统示例详解
2018/03/13 PHP
php基于Redis消息队列实现的消息推送的方法
2018/11/28 PHP
javascript之典型高阶函数应用介绍
2013/01/10 Javascript
判断js对象是否拥有某一个属性的js代码
2013/08/16 Javascript
node.js中使用node-schedule实现定时任务实例
2014/06/03 Javascript
javascript创建动态表单的方法
2015/07/25 Javascript
js前端面试题及答案整理(一)
2016/08/26 Javascript
基于JS实现回到页面顶部的五种写法(从实现到增强)
2016/09/03 Javascript
Javascript 实现微信分享(QQ、朋友圈、分享给朋友)
2016/10/21 Javascript
js拖拽功能实现代码解析
2016/11/28 Javascript
jQuery中table数据的值拷贝和拆分
2017/03/19 Javascript
iframe与主框架跨域相互访问实现方法
2017/09/14 Javascript
Element UI框架中巧用树选择器的实现
2018/12/12 Javascript
vue中$nextTick的用法讲解
2019/01/17 Javascript
[01:28]国服启动器接入蒸汽平台操作流程视频
2021/03/11 DOTA
详解python之配置日志的几种方式
2017/05/22 Python
详解用python自制微信机器人,定时发送天气预报
2019/03/25 Python
如何通过python实现全排列
2020/02/11 Python
浅谈PyTorch的可重复性问题(如何使实验结果可复现)
2020/02/20 Python
python之MSE、MAE、RMSE的使用
2020/02/24 Python
Django REST Swagger实现指定api参数
2020/07/07 Python
css3实现文字首尾衔接跑马灯的示例代码
2020/10/16 HTML / CSS
香港士多网上超级市场:Ztore
2021/01/09 全球购物
linux面试题参考答案(1)
2016/01/22 面试题
社区母亲节活动方案
2014/03/05 职场文书
《草原的早晨》教学反思
2014/04/08 职场文书
三月学雷锋月活动总结
2014/04/28 职场文书
难忘的一天教学反思
2014/04/30 职场文书
2015年安全生产目标责任书
2015/01/29 职场文书
2015年学生会个人工作总结
2015/04/09 职场文书
用python批量解压带密码的压缩包
2021/05/31 Python
Win2008系统搭建DHCP服务器
2022/06/25 Servers