AngularJS入门教程之过滤器详解


Posted in Javascript onAugust 19, 2016

在这一步你将学习到如何创建自己的显示过滤器。

请重置工作目录:

git checkout -f step-9

现在转到一个手机详细信息页面。在上一步,手机详细页面显示“true”或者“false”来说明某个手机是否具有特定的特性。现在我们使用一个定制的过滤器来把那些文本串图形化:√作为“true”;以及×作为“false”。来让我们看看过滤器代码长什么样子。

步骤8和步骤9之间最重要的不同在下面列出。你可以在GitHub里看到完整的差别。

定制过滤器

为了创建一个新的过滤器,先创建一个phonecatFilters模块,并且将定制的过滤器注册给这个模块。

app/js/filters.js

angular.module('phonecatFilters', []).filter('checkmark', function() {
 return function(input) {
  return input ? '\u2713' : '\u2718';
 };
});

我们的过滤器命名为checkmark。它的输入要么是true,要么是false,并且我们返回两个表示true或false的unicode字符(\u2713和\u2718)。

现在我们的过滤器准备好了,我们需要将我们的phonecatFilters模块作为一个依赖注册到我们的主模块phonecat上。

app/js/app/js

...
angular.module('phonecat', ['phonecatFilters']).
...

模板

由于我们的模板代码写在app/js/filter.js文件中,所以我们需要在布局模板中引入这个文件。

app/index.html

...
 <script src="js/controllers.js"></script>
 <script src="js/filters.js"></script>
...

在AngularJS模板中使用过滤器的语法是:

{{ expression | filter }}

我们把过滤器应用到手机详细信息模板中:

app/partials/phone-detail.html

...
  <dl>
   <dt>Infrared</dt>
   <dd>{{phone.connectivity.infrared | checkmark}}</dd>
   <dt>GPS</dt>
   <dd>{{phone.connectivity.gps | checkmark}}</dd>
  </dl>
...

测试

过滤器和其他组件一样,应该被测试,并且这些测试实际上很容易完成。

test/unit/filtersSpec.js

describe('filter', function() {

 beforeEach(module('phonecatFilters'));


 describe('checkmark', function() {

  it('should convert boolean values to unicode checkmark or cross',
    inject(function(checkmarkFilter) {
   expect(checkmarkFilter(true)).toBe('\u2713');
   expect(checkmarkFilter(false)).toBe('\u2718');
  }));
 });
});

注意在执行任何过滤器测试之前,你需要为phonecatFilters模块配置我们的测试注入器。

执行./scripts/test/sh运行测试,你应该会看到如下的输出:

Chrome: Runner reset.
....
Total 4 tests (Passed: 4; Fails: 0; Errors: 0) (3.00 ms)
 Chrome 19.0.1084.36 Mac OS: Run 4 tests (Passed: 4; Fails: 0; Errors 0) (3.00 ms)

现在让我们来练习一下AngularJS内置过滤器,在index.html中加入如下绑定:

  1. {{ "lower cap string" | uppercase }}
  2. {{ {foo: "bar", baz: 23} | json }}
  3. {{ 1304375948024 | date }}
  4. {{ 1304375948024 | date:"MM/dd/yyyy @ h:mma" }}

我们也可以用一个输入框来创建一个模型,并且将之与一个过滤后的绑定结合在一起。在index.html中加入如下代码:

<input ng-model="userInput"> Uppercased: {{ userInput | uppercase }}

总结

现在你已经知道了如何编写和测试一个定制化插件,在步骤10中我们会学习如何用AngularJS继续丰富我们的手机详细信息页面。

以上就是对AngularJS 过滤器的资料整理,后续继续补充相关资料,谢谢大家对本站的支持!

Javascript 相关文章推荐
Web 前端设计模式--Dom重构 提高显示性能
Oct 22 Javascript
从面试题学习Javascript 面向对象(创建对象)
Mar 30 Javascript
解析img图片没找到onerror事件 Stack overflow at line: 0
Dec 23 Javascript
使用phantomjs进行网页抓取的实现代码
Sep 29 Javascript
JQuery给网页更换皮肤的方法
May 30 Javascript
jQuery+Ajax实现无刷新分页
Oct 30 Javascript
浅谈javascript中的加减时间
Jul 12 Javascript
vue中的scope使用详解
Oct 29 Javascript
Vue.js在数组中插入重复数据的实现代码
Nov 17 Javascript
webpack中使用iconfont字体图标的方法
Feb 22 Javascript
jquery使用FormData实现异步上传文件
Oct 25 jQuery
JS合并两个数组的3种方法详解
Oct 24 Javascript
js判断checkbox是否选中个数的方法(超简单)
Aug 19 #Javascript
Angular设置title信息解决SEO方面存在问题
Aug 19 #Javascript
js仿腾讯QQ的web登陆界面
Aug 19 #Javascript
基于WebUploader的文件上传js插件
Aug 19 #Javascript
JS获取checkbox的个数简单实例
Aug 19 #Javascript
JS提示:Uncaught SyntaxError:Unexpected token ) 错误的解决方法
Aug 19 #Javascript
jQuery搜索框效果实现代码(百度关键词联想)
Feb 25 #Javascript
You might like
网站被恶意镜像怎么办 php一段代码轻松搞定(全面版)
2018/10/23 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
javascript下function声明一些小结
2007/12/28 Javascript
JQuery autocomplete 使用手册
2010/04/01 Javascript
JS Excel读取和写入操作(模板操作)实现代码
2010/04/11 Javascript
javascript学习笔记(十九) 节点的操作实现代码
2012/06/20 Javascript
一段非常简单的js判断浏览器的内核
2014/08/17 Javascript
JavaScript中匿名、命名函数的性能测试
2014/09/04 Javascript
jQuery实现仿美橙互联两级导航菜单效果完整实例
2015/09/17 Javascript
JS禁用页面上所有控件的实现方法(附demo源码下载)
2015/12/17 Javascript
基于AngularJS+HTML+Groovy实现登录功能
2016/02/17 Javascript
关于backbone url请求中参数带有中文存入数据库是乱码的快速解决办法
2016/06/13 Javascript
浅谈javascript中的数据类型转换
2016/12/27 Javascript
JavaScript BASE64算法实现(完美解决中文乱码)
2017/01/10 Javascript
bootstrap+jQuery 实现下拉菜单中复选框全选和全不选效果
2017/06/12 jQuery
使用layui 渲染table数据表格的实例代码
2018/08/19 Javascript
详解用js代码触发dom事件的实现方案
2020/06/10 Javascript
vue实现点击按钮切换背景颜色的示例代码
2020/06/23 Javascript
vue element el-transfer增加拖拽功能
2021/01/15 Vue.js
python多线程用法实例详解
2015/01/15 Python
Python中的多行注释文档编写风格汇总
2016/06/16 Python
Python利用multiprocessing实现最简单的分布式作业调度系统实例
2017/11/14 Python
python3.X 抓取火车票信息【修正版】
2018/06/19 Python
Python一句代码实现找出所有水仙花数的方法
2018/11/13 Python
Python3 导入上级目录中的模块实例
2019/02/16 Python
Python3远程监控程序的实现方法
2019/07/15 Python
Python上下文管理器全实例详解
2019/11/12 Python
详解从Django Allauth中进行登录改造小结
2019/12/18 Python
纯CSS3实现手风琴风格菜单具体步骤
2013/05/06 HTML / CSS
html+css3实现的登录界面
2020/12/09 HTML / CSS
英国时尚服饰电商:Boohoo
2017/10/12 全球购物
C#面试问题
2016/07/29 面试题
教师优秀党员事迹材料
2014/08/14 职场文书
员工聘用合同范本
2015/09/21 职场文书
高端收音机+蓝牙音箱,JBL TUNER FM带收音蓝牙音箱评测
2021/04/24 无线电
mysql定时自动备份数据库的方法步骤
2021/07/07 MySQL