From 6181ca600d3deced0a054551ff6c704bc17d6b7d Mon Sep 17 00:00:00 2001 From: Igor Minar Date: Mon, 2 May 2011 10:16:50 -0700 Subject: new batch of tutorial docs --- docs/content/tutorial/step_09.ngdoc | 235 +++++++++++++++++++----------------- 1 file changed, 127 insertions(+), 108 deletions(-) (limited to 'docs/content/tutorial/step_09.ngdoc') diff --git a/docs/content/tutorial/step_09.ngdoc b/docs/content/tutorial/step_09.ngdoc index 2d6ed925..1009217d 100755 --- a/docs/content/tutorial/step_09.ngdoc +++ b/docs/content/tutorial/step_09.ngdoc @@ -1,108 +1,127 @@ -@workInProgress -@ngdoc overview -@name Tutorial: Step 9 -@description - - - - - - - - -
{@link tutorial.step_08 Previous}{@link http://angular.github.com/angular-phonecat/step-9/app Live Demo -}{@link tutorial Tutorial Home}{@link https://github.com/angular/angular-phonecat/compare/step-8...step-9 Code -Diff}{@link tutorial.step_10 Next}
- -In this step, we have determined that the built-in angular display filters ({@link -angular.filter.number number}, {@link angular.filter.currency currency}, {@link -angular.filter.date date}, etc.) don't handle what we want to do, so we get to create our own -custom {@link angular.filter filter}. - -In the previous step, the details page displayed either "true" or "false" to indicate whether -certain phone features were present or not. Our custom "checkmark" filter replaces those text -strings with glyphs: ✓ for "true", and ✘ for "false". - -Our filter code lives in `app/js/filters.js`: - -__`app/index.html`:__ -
-...
- 
- 
- 
-...
-
- -In the phone details template, we employ our filter for angular expressions whose values are -"true" or "false"; `{{ [phone_feature] | checkmark }}`: - -__`app/partials/phone-detail.html`:__ -
-
-

{{phone.name}}

-

{{phone.description}}

-... - -
- -__`app/js/filters.js`:__ (New) -
-angular.filter('checkmark', function(input) {
-  return input ? '\u2713' : '\u2718';
-});
-
- -__`test/unit/filtersSpec.js`:__ (New) -
-describe('checkmark filter', function() {
-
-  it('should convert boolean values to unicode checkmark or cross', function() {
-    expect(angular.filter.checkmark(true)).toBe('\u2713');
-    expect(angular.filter.checkmark(false)).toBe('\u2718');
-  });
-})
-
- -## Discussion: - -* This example shows how easy it is to roll your own filters for displaying data. As explained in -the "Writing your own Filters" section of the {@link angular.filter angular.filter} page, you -simply register your custom filter function on to the `angular.filter` function. - -* In this example, our filter name is "checkmark"; our input is either "true" or "false", and we -return one of two unicode characters we have chosen to represent true or false (`\u2713` and -`\u2718`). - -* We created a new unit test to verify that our custom filter converts boolean values to unicode -characters. - - - - - - - - - -
{@link tutorial.step_08 Previous}{@link http://angular.github.com/angular-phonecat/step-9/app Live Demo -}{@link tutorial Tutorial Home}{@link https://github.com/angular/angular-phonecat/compare/step-8...step-9 Code -Diff}{@link tutorial.step_10 Next}
+@ngdoc overview +@name Tutorial: Step 9 +@description + + + + + + + + +
{@link tutorial.step_08 Previous}{@link http://angular.github.com/angular-phonecat/step-9/app Live Demo +}{@link tutorial Tutorial Home}{@link https://github.com/angular/angular-phonecat/compare/step-8...step-9 Code +Diff}{@link tutorial.step_10 Next}
+ +In this step you will learn how to create your own custom display filter. + +1. Reset your workspace to Step 9 using: + + git checkout --force step-9 + +or + + ./goto_step.sh 9 + +2. Refresh your browser or check the app out on {@link +http://angular.github.com/angular-phonecat/step-9/app our server}. Navigate to one of the detail +pages. + +In the previous step, the details page displayed either "true" or "false" to indicate whether +certain phone features were present or not. We have used a custom filter to convert those text +strings into glyphs: ✓ for "true", and ✘ for "false". Let's see, what the filter code looks like. + +The most important changes are listed below. You can see the full diff on {@link +https://github.com/angular/angular-phonecat/compare/step-8...step-9 +GitHub}: + + +## Custom Filter + +In order to create a new filter, simply register your custom filter function with the `{@link +angular.filter angular.filter}` API. + +__`app/js/filters.js`:__ +
+angular.filter('checkmark', function(input) {
+  return input ? '\u2713' : '\u2718';
+});
+
+ +The name of our filter is "checkmark". The `input` evaluates to either "true" or "false", and we +return one of two unicode characters we have chosen to represent true or false (`\u2713` and +`\u2718`). + + +## Template + +Since the filter code lives in the `app/js/filters.js` file, we need to include this file in our +layout template. + +__`app/index.html`:__ +
+...
+ 
+ 
+...
+
+ +The syntax for using filters in angular templates is as follows: + + {{ expression | filter }} + +Let's employ the filter in the phone details template: + + + +__`app/partials/phone-detail.html`:__ +
+...
+    
+
Infrared
+
{{phone.connectivity.infrared | checkmark}}
+
GPS
+
{{phone.connectivity.gps | checkmark}}
+
+... +
+ + +## Test + +Filters, like any other component, should be tested and these tests are very easy to write. + +__`test/unit/filtersSpec.js`:__ +
+describe('checkmark filter', function() {
+
+  it('should convert boolean values to unicode checkmark or cross', function() {
+    expect(angular.filter.checkmark(true)).toBe('\u2713');
+    expect(angular.filter.checkmark(false)).toBe('\u2718');
+  });
+})
+
+ +To run the unit tests, execute the `./scripts/test.sh` script and you should see the following +output. + + Chrome: Runner reset. + .... + Total 4 tests (Passed: 4; Fails: 0; Errors: 0) (3.00 ms) + Chrome 11.0.696.57 Mac OS: Run 4 tests (Passed: 4; Fails: 0; Errors 0) (3.00 ms) + + +Now that you have learned how to write and test a custom filter, go to Step 10 to learn how we can +use angular to enhance the phone details page further. + + + + + + + + + +
{@link tutorial.step_08 Previous}{@link http://angular.github.com/angular-phonecat/step-9/app Live Demo +}{@link tutorial Tutorial Home}{@link https://github.com/angular/angular-phonecat/compare/step-8...step-9 Code +Diff}{@link tutorial.step_10 Next}
-- cgit v1.2.3