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 相关文章推荐
javascript 播放器 控制
Jan 22 Javascript
js 日期比较相关天数代码
Apr 02 Javascript
Node.js中对通用模块的封装方法
Jun 06 Javascript
javascript进行数组追加方法小结
Jun 16 Javascript
node.js中的buffer.toString方法使用说明
Dec 14 Javascript
js获取当前日期时间及其它日期操作汇总
Mar 08 Javascript
jQuery链式调用与show知识浅析
May 11 Javascript
js动态添加的DIV中的onclick事件简单实例
Jul 25 Javascript
js运动事件函数详解
Oct 21 Javascript
jQuery+Cookie实现切换皮肤功能【附源码下载】
Mar 25 jQuery
微信小程序实现带参数的分享功能(两种方法)
May 17 Javascript
创建nuxt.js项目流程图解
Mar 13 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使用substr()和strpos()联合查找字符串中某一特定字符的方法
2015/05/12 PHP
PHP有序表查找之插值查找算法示例
2018/02/10 PHP
Laravel实现批量更新多条数据
2020/04/06 PHP
IE6,IE7下js动态加载图片不显示错误
2010/07/17 Javascript
如何确保JavaScript的执行顺序 之jQuery.html深度分析
2011/03/03 Javascript
Javascript学习笔记之 对象篇(一) : 对象的使用和属性
2014/06/24 Javascript
JS中创建函数的三种方式及区别
2016/03/13 Javascript
JSONP跨域请求实例详解
2016/07/04 Javascript
关于js原型的面试题讲解
2016/09/25 Javascript
JavaScript中setTimeout的那些事儿
2016/11/14 Javascript
JSON键值对序列化和反序列化解析
2017/01/24 Javascript
基于JavaScript定位当前的地理位置
2017/04/11 Javascript
JS实现上传图片的三种方法并实现预览图片功能
2017/07/14 Javascript
Angularjs 1.3 中的$parse实例代码
2017/09/14 Javascript
vue实现点击选中,其他的不选中方法
2018/09/05 Javascript
vue+elementUI实现表格关键字筛选高亮
2020/10/26 Javascript
JS实现长图上下滚动效果
2020/03/19 Javascript
swiper实现导航滚动效果
2020/12/13 Javascript
python分析网页上所有超链接的方法
2015/05/08 Python
python邮件发送smtplib使用详解
2020/06/16 Python
centos7中安装python3.6.4的教程
2019/12/11 Python
python利用opencv实现SIFT特征提取与匹配
2020/03/05 Python
python神经网络编程实现手写数字识别
2020/05/27 Python
什么是反射
2012/03/17 面试题
怎样声明一个匿名的内部类
2016/06/01 面试题
党员的自我评价范文
2014/01/02 职场文书
总会计师岗位职责
2014/02/19 职场文书
元旦晚会感言
2014/03/12 职场文书
幼儿园小班见习报告
2014/10/31 职场文书
2014年银行年终工作总结
2014/12/19 职场文书
龙潭大峡谷导游词
2015/02/10 职场文书
困难补助申请报告
2015/05/19 职场文书
2015新教师教学工作总结
2015/07/22 职场文书
2015年国庆节寄语
2015/08/17 职场文书
Angular CLI发布路径的配置项浅析
2021/03/29 Javascript
nginx的zabbix 5.0安装部署的方法步骤
2021/07/16 Servers