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 相关文章推荐
jQuery 白痴级入门教程
Nov 11 Javascript
Javascript 类、命名空间、代码组织代码
Jul 31 Javascript
js 手机号码合法性验证代码集合
Sep 29 Javascript
JavaScript利用append添加元素报错的解决方法
Jul 01 Javascript
jQuery中dom元素上绑定的事件详解
Apr 24 Javascript
JavaScript中使用自然对数ln的方法
Jun 14 Javascript
JS中dom0级事件和dom2级事件的区别介绍
May 05 Javascript
jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
Jun 28 Javascript
基于javascript实现按圆形排列DIV元素(一)
Dec 02 Javascript
使用vue.js编写蓝色拼图小游戏
Mar 17 Javascript
JS HTML图片显示Canvas 压缩功能
Jul 21 Javascript
JS数据类型判断的几种常用方法
Jul 07 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查看session内容的函数
2008/08/27 PHP
php select,radio和checkbox默认选择的实现方法
2010/05/15 PHP
PHP生成sitemap.xml地图函数
2013/11/13 PHP
类似框架的js代码
2006/11/09 Javascript
网站404页面3秒后跳到首页的实例代码
2013/08/16 Javascript
js中的preventDefault与stopPropagation详解
2014/01/29 Javascript
使用Nodejs开发微信公众号后台服务实例
2014/09/03 NodeJs
jQuery实现的图片分组切换焦点图插件
2015/01/06 Javascript
jQuery动画效果图片轮播特效
2016/01/12 Javascript
Bootstrap模仿起筷首页效果
2016/05/09 Javascript
JavaScript String(字符串)对象的简单实例(推荐)
2016/08/31 Javascript
教你用十行node.js代码读取docx的文本
2017/03/08 Javascript
通俗解释JavaScript正则表达式快速记忆
2017/08/23 Javascript
微信小程序中使用wxss加载图片并实现动画效果
2018/08/13 Javascript
angular2 ng2-file-upload上传示例代码
2018/08/23 Javascript
vue router 源码概览案例分析
2018/10/09 Javascript
7个好用的JavaScript技巧分享(译)
2019/05/07 Javascript
Vue 子组件与数据传递问题及注意事项
2019/07/11 Javascript
浅谈对于“不用setInterval,用setTimeout”的理解
2019/08/28 Javascript
使用JavaScript实现网页秒表功能(含开始、暂停、继续、重置功能)
2020/06/05 Javascript
[02:20]DOTA2亚洲邀请赛 EHOME战队出场宣传片
2015/02/07 DOTA
[59:59]EG vs IG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python使用append合并两个数组的方法
2015/04/28 Python
深入理解Python对Json的解析
2017/02/14 Python
python3.5+tesseract+adb实现西瓜视频或头脑王者辅助答题
2018/01/17 Python
python中退出多层循环的方法
2018/11/27 Python
python实现祝福弹窗效果
2019/04/07 Python
python射线法判断一个点在图形区域内外
2019/06/28 Python
Python OpenCV视频截取并保存实现代码
2019/11/30 Python
Django多数据库配置及逆向生成model教程
2020/03/28 Python
Python+Selenium实现自动化的环境搭建的步骤(图文)
2020/09/01 Python
美国大码时尚女装购物网站:ELOQUII
2017/12/28 全球购物
业绩考核岗位职责
2014/02/01 职场文书
工程售后服务承诺书
2014/05/21 职场文书
党员批评与自我批评思想汇报(集锦)
2014/09/14 职场文书
禁毒主题班会教案
2015/08/14 职场文书