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 相关文章推荐
js实现页面打印功能实例代码(附去页眉页脚功能代码)
Dec 15 Javascript
javascript计时器事件使用详解
Jan 07 Javascript
JavaScript中判断页面关闭、页面刷新的实现代码
Aug 27 Javascript
jQuery中复合属性选择器用法实例
Dec 31 Javascript
jQuery formValidator表单验证
Jan 07 Javascript
Extjs4.0 ComboBox如何实现三级联动
May 11 Javascript
使用bootstrap typeahead插件实现输入框自动补全之问题及解决办法
Jul 07 Javascript
使用Angular CLI进行单元测试和E2E测试的方法
Mar 24 Javascript
@angular前端项目代码优化之构建Api Tree的方法
Dec 24 Javascript
通过js给网页加上水印背景实例
Jun 17 Javascript
JavaScript实现Excel表格效果
Feb 07 Javascript
Vue实现菜单切换功能
Nov 08 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 变量的使用方法详解与实例代码
2013/09/11 PHP
PHP中调用C/C++制作的动态链接库的教程
2016/03/10 PHP
laravel异步监控定时调度器实例详解
2019/06/21 PHP
脚本吧 - 幻宇工作室用到js,超强推荐base.js
2006/12/23 Javascript
Javascript学习笔记6 prototype的提出
2010/01/11 Javascript
JavaScript中的undefined学习总结
2013/11/30 Javascript
jQuery中delegate与on的用法与区别示例介绍
2013/12/20 Javascript
删除节点的jquery代码
2014/01/13 Javascript
jquery实现增加删除行的方法
2015/02/03 Javascript
原生JS实现响应式瀑布流布局
2015/04/02 Javascript
JavaScript返回网页中超链接数量的方法
2015/04/03 Javascript
JavaScript+CSS实现的可折叠二级菜单实例
2016/02/29 Javascript
Jquery+ajax+JAVA(servlet)实现下拉菜单异步取值
2016/03/23 Javascript
完美解决jQuery 鼠标快速滑过后,会执行多次滑出的问题
2016/12/08 Javascript
jQuery插件echarts实现的多柱子柱状图效果示例【附demo源码下载】
2017/03/04 Javascript
解决Extjs下拉框不显示的问题
2017/06/21 Javascript
详解ECMAScript typeof用法
2018/07/25 Javascript
JavaScript实现shuffle数组洗牌操作示例
2019/01/03 Javascript
移动端(微信等使用vConsole调试console的方法
2019/03/05 Javascript
node静态服务器实现静态读取文件或文件夹
2019/12/03 Javascript
解决vue 使用axios.all()方法发起多个请求控制台报错的问题
2020/11/09 Javascript
[47:35]VP vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
Python代码块批量添加Tab缩进的方法
2018/06/25 Python
python 字典修改键(key)的几种方法
2018/08/10 Python
pytorch自定义初始化权重的方法
2019/08/17 Python
Python如何实现定时器功能
2020/05/28 Python
TripAdvisor越南:全球领先的旅游网站
2017/09/21 全球购物
中专毕业生求职简历的自我评价
2013/10/21 职场文书
《我的信念》教学反思
2014/02/15 职场文书
经典公益广告词
2014/03/13 职场文书
《白鹅》教学反思
2014/04/13 职场文书
党支部对转正的意见
2015/06/02 职场文书
2015暑假社会调查报告
2015/07/13 职场文书
浅谈Python项目的服务器部署
2021/04/25 Python
ant design vue的form表单取值方法
2022/06/01 Vue.js
Python测试框架pytest核心库pluggy详解
2022/08/05 Golang