在使用 AngularJS 的过程中会遇到一些特殊的数据处理,你可以通过采用 AngularJS 筛选器的方式来对不同的数据处理实现想要达到的效果。
在这一步中,你将学会如何创建你自己的自定义显示筛选器。
把工作空间重置到第九步
git checkout -f step-9
刷新你的浏览器或在线检查这一步:Step 9 Live Demo
下面列出了第八步和第九步之间最重要的区别。你可以在GitHub上看到完整的差异。
为了创建一个新筛选器,你即将创建一个phonecatFilters
模块,并用这个模块注册你的自定义滤镜:
app/js/filters.js
:
angular.module("phonecatFilters", []).filter("checkmark", function() {
return function(input) {
return input ? "u2713" : "u2718";
};
});
我们的筛选器的名字是“checkmark”。input
要么估值为true
,要么估值为false
,而且会返回我们选中用来代表true和false的两个unicode字符之一(u2713
->?代表true,u2718
-> ?代表false)。
现在我们的筛选器已经准备好了,我们需要注册phonecatFilters
模块作为我们的主phonecatApp
模块的依赖性。
app/js/app.js
:
...
angular.module("phonecatApp", ["ngRoute","phonecatControllers","phonecatFilters"]);
...
因为筛选器生存在app/js/filters.js
文件夹中,我们需要在我们的布局模板中包含这个文件。
app/index.html
:
...
<script src="/attachments/image/wk/angularjs/controllers.js"></script>
<script src="/attachments/image/wk/angularjs/filters.js"></script>
...
在Angular模板中使用筛选器的句法如下所示:
{{ 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");
}));
});
});
我们必须在执行任何筛选器测试之前调用beforeEach(module("phonecatFilters"))
。这种调用把我们的phonecatFilter
模块载入到注入器,以测试运行。
注意我们将调用助手函数inject(function(checkmarkFilter) { ... })
,从而获得访问我们想要测试的文件。参见angular.mock.inject()。
注意在注入的时候,后缀Filter
会追加到你的筛选器名称中。参见筛选器指南?部分,在那里是概述。
你现在必须在Karma选项卡中看到以下的输出:
Chrome 22.0: Executed 4 of 4 SUCCESS (0.034 secs / 0.012 secs)
让我们用一些内建的Angular筛选器来做实验,并把以下绑定添加到index.html
:
{{ "lower cap string" | uppercase }}
{{ {foo: "bar", baz: 23} | json }}
{{ 1304375948024 | date }}
{{ 1304375948024 | date:"MM/dd/yyyy @ h:mma" }}
我们可以创建一个模块,带有一个输入元素,并把它与一个筛选绑定结合起来。向index.html添加以下代码:
<input ng-model="userInput"> Uppercased: {{ userInput | uppercase }}
现在你已经学会了如何编写并测试一个自定义筛选器,前往第十步 事件处理函数以学习我们可以如何用Angular继续丰富手机详情页面。
插件Vue CLI 使用了一套基于插件的架构。如果你查阅一个新创建项目的package.json,就会发现依赖都是以@vue/cli-plugin-开头的。...
当你运行vue-cli-service build时,你可以通过--target选项指定不同的构建目标。它允许你将相同的源代码根据不同的用例生成不同...
大部分的基础内容我们已经讲到了,现在讲点底层内容。Vue 最显著的一个功能是响应系统 —— 模型只是普通对象,修改它则更新视图...
交叉类型(Intersection Types)交叉类型是将多个类型合并为一个类型。 这让我们可以把现有的多种类型叠加到一起成为一种类型,...