From b2b4d3b8c9146f35b5c62bde5f38d656130656e0 Mon Sep 17 00:00:00 2001 From: Ward Bell Date: Sat, 12 Dec 2015 22:01:46 -0800 Subject: [PATCH] docs(pipes): sample shuffle, refactor, alpha.53 closes #487 --- .../app/app.html => app/app.component.html} | 19 +-- .../_examples/pipes/ts/app/app.component.ts | 21 +++ public/docs/_examples/pipes/ts/app/boot.ts | 6 + .../exponential-strength.pipe.ts} | 15 +- .../fetch-json.pipe.ts} | 12 +- .../ts/app/hero-async-message.component.ts | 15 ++ .../pipes/ts/app/hero-birthday1.component.ts | 14 ++ .../hero-birthday2.component.ts} | 20 ++- .../pipes/ts/app/hero-list.component.ts | 24 +++ .../app/power-boost-calculator.component.ts | 20 +++ .../power-booster.component.ts} | 6 +- .../pipes/ts/app/window.extension.d.ts | 3 + .../_examples/pipes/ts/{src => }/heroes.json | 0 public/docs/_examples/pipes/ts/index.html | 23 +++ public/docs/_examples/pipes/ts/plnkr.json | 8 + public/docs/_examples/pipes/ts/src/app/app.ts | 52 ------- .../pipes/ts/src/app/hero-list-component.ts | 25 ---- .../ts/src/app/power-boost-calculator.ts | 21 --- .../pipes/ts/src/app/window.extension.d.ts | 3 - public/docs/_examples/pipes/ts/src/index.html | 23 --- public/docs/_examples/pipes/ts/src/plnkr.json | 3 - public/docs/ts/latest/guide/pipes.jade | 140 +++++++++--------- .../pipes/power-boost-calculator-anim.gif | Bin 0 -> 54689 bytes 23 files changed, 246 insertions(+), 227 deletions(-) rename public/docs/_examples/pipes/ts/{src/app/app.html => app/app.component.html} (77%) create mode 100644 public/docs/_examples/pipes/ts/app/app.component.ts create mode 100644 public/docs/_examples/pipes/ts/app/boot.ts rename public/docs/_examples/pipes/ts/{src/app/exponential-strength-pipe.ts => app/exponential-strength.pipe.ts} (75%) rename public/docs/_examples/pipes/ts/{src/app/fetch-json-pipe.ts => app/fetch-json.pipe.ts} (65%) create mode 100644 public/docs/_examples/pipes/ts/app/hero-async-message.component.ts create mode 100644 public/docs/_examples/pipes/ts/app/hero-birthday1.component.ts rename public/docs/_examples/pipes/ts/{src/app/hero-birthday.ts => app/hero-birthday2.component.ts} (55%) create mode 100644 public/docs/_examples/pipes/ts/app/hero-list.component.ts create mode 100644 public/docs/_examples/pipes/ts/app/power-boost-calculator.component.ts rename public/docs/_examples/pipes/ts/{src/app/power-booster.ts => app/power-booster.component.ts} (64%) create mode 100644 public/docs/_examples/pipes/ts/app/window.extension.d.ts rename public/docs/_examples/pipes/ts/{src => }/heroes.json (100%) create mode 100644 public/docs/_examples/pipes/ts/index.html create mode 100644 public/docs/_examples/pipes/ts/plnkr.json delete mode 100644 public/docs/_examples/pipes/ts/src/app/app.ts delete mode 100644 public/docs/_examples/pipes/ts/src/app/hero-list-component.ts delete mode 100644 public/docs/_examples/pipes/ts/src/app/power-boost-calculator.ts delete mode 100644 public/docs/_examples/pipes/ts/src/app/window.extension.d.ts delete mode 100644 public/docs/_examples/pipes/ts/src/index.html delete mode 100644 public/docs/_examples/pipes/ts/src/plnkr.json create mode 100644 public/resources/images/devguide/pipes/power-boost-calculator-anim.gif diff --git a/public/docs/_examples/pipes/ts/src/app/app.html b/public/docs/_examples/pipes/ts/app/app.component.html similarity index 77% rename from public/docs/_examples/pipes/ts/src/app/app.html rename to public/docs/_examples/pipes/ts/app/app.component.html index efe83db02c..7cbc969c84 100644 --- a/public/docs/_examples/pipes/ts/src/app/app.html +++ b/public/docs/_examples/pipes/ts/app/app.component.html @@ -1,12 +1,11 @@ +
- +
-
-

The hero's birthday is {{ birthday | date }}

@@ -16,8 +15,7 @@
- -

Hero Birthday 2

+

Hero Birthday v.2

loading...
@@ -32,15 +30,18 @@

The chained hero's birthday is - {{ ( birthday | date:'fullDate' ) | uppercase}} + {{ birthday | date:'fullDate' | uppercase}}

- + +

+ The chained hero's birthday is + {{ ( birthday | date:'fullDate' ) | uppercase}} +

+
- loading...
- loading .. diff --git a/public/docs/_examples/pipes/ts/app/app.component.ts b/public/docs/_examples/pipes/ts/app/app.component.ts new file mode 100644 index 0000000000..db6a0c7a81 --- /dev/null +++ b/public/docs/_examples/pipes/ts/app/app.component.ts @@ -0,0 +1,21 @@ +// #docregion +import {Component} from 'angular2/core'; +import {HeroAsyncMessageComponent} from './hero-async-message.component'; +import {HeroBirthday} from './hero-birthday2.component'; +import {HeroListComponent} from './hero-list.component'; +import {PowerBooster} from './power-booster.component'; +import {PowerBoostCalculator} from './power-boost-calculator.component'; + +@Component({ + selector: 'my-app', + templateUrl: 'app/app.component.html', + directives:[ + HeroAsyncMessageComponent, + HeroBirthday, + HeroListComponent, + PowerBooster, PowerBoostCalculator + ] +}) +export class AppComponent { + birthday = new Date(1988,3,15); // April 15, 1988 +} diff --git a/public/docs/_examples/pipes/ts/app/boot.ts b/public/docs/_examples/pipes/ts/app/boot.ts new file mode 100644 index 0000000000..597ab3aa7c --- /dev/null +++ b/public/docs/_examples/pipes/ts/app/boot.ts @@ -0,0 +1,6 @@ +import {bootstrap} from 'angular2/platform/browser'; +import {AppComponent} from './app.component'; +import {HeroBirthday} from './hero-birthday1.component'; + +bootstrap(AppComponent); +bootstrap(HeroBirthday); // v.1 \ No newline at end of file diff --git a/public/docs/_examples/pipes/ts/src/app/exponential-strength-pipe.ts b/public/docs/_examples/pipes/ts/app/exponential-strength.pipe.ts similarity index 75% rename from public/docs/_examples/pipes/ts/src/app/exponential-strength-pipe.ts rename to public/docs/_examples/pipes/ts/app/exponential-strength.pipe.ts index bed8e2dd2e..dae9b3ab6c 100644 --- a/public/docs/_examples/pipes/ts/src/app/exponential-strength-pipe.ts +++ b/public/docs/_examples/pipes/ts/app/exponential-strength.pipe.ts @@ -1,21 +1,18 @@ // #docregion -import {Pipe} from 'angular2/angular2'; -/* +import {Pipe} from 'angular2/core'; +/* * Raise the value exponentially * Takes an exponent argument that defaults to 1. - * Usage: + * Usage: * value | exponentialStrength:exponent * Example: * {{ 2 | exponentialStrength:10}} * formats to: 1024 -*/ -@Pipe({ - name: 'exponentialStrength' -}) +*/ +@Pipe({name: 'exponentialStrength'}) export class ExponentialStrengthPipe { - + transform(value:number, args:string[]) : any { return Math.pow(value, parseInt(args[0] || '1', 10)); } } -// #enddocregion \ No newline at end of file diff --git a/public/docs/_examples/pipes/ts/src/app/fetch-json-pipe.ts b/public/docs/_examples/pipes/ts/app/fetch-json.pipe.ts similarity index 65% rename from public/docs/_examples/pipes/ts/src/app/fetch-json-pipe.ts rename to public/docs/_examples/pipes/ts/app/fetch-json.pipe.ts index a1c61e538b..e9a31bc0ec 100644 --- a/public/docs/_examples/pipes/ts/src/app/fetch-json-pipe.ts +++ b/public/docs/_examples/pipes/ts/app/fetch-json.pipe.ts @@ -1,7 +1,6 @@ -/// - +/// // #docregion -import {Pipe} from 'angular2/angular2'; +import {Pipe} from 'angular2/core'; // #docregion pipe-metadata @Pipe({ @@ -12,13 +11,12 @@ import {Pipe} from 'angular2/angular2'; export class FetchJsonPipe { private fetchedValue:any; private fetchPromise:Promise; + transform(value:string, args:string[]):any { if (!this.fetchPromise) { this.fetchPromise = window.fetch(value) - .then(result => result.json()) - .then(json => { - this.fetchedValue = json; - }); + .then((result:any) => result.json()) + .then((json:any) => this.fetchedValue = json); } return this.fetchedValue; diff --git a/public/docs/_examples/pipes/ts/app/hero-async-message.component.ts b/public/docs/_examples/pipes/ts/app/hero-async-message.component.ts new file mode 100644 index 0000000000..9303932d41 --- /dev/null +++ b/public/docs/_examples/pipes/ts/app/hero-async-message.component.ts @@ -0,0 +1,15 @@ +// #docregion +import {Component} from 'angular2/core'; + +// Initial view: "Message: " +// After 500ms: Message: You are my Hero!" + +@Component({ + selector: 'hero-message', + template: 'Message: {{delayedMessage | async}}', +}) +export class HeroAsyncMessageComponent { + delayedMessage:Promise = new Promise((resolve, reject) => { + setTimeout(() => resolve('You are my Hero!'), 500); + }); +} diff --git a/public/docs/_examples/pipes/ts/app/hero-birthday1.component.ts b/public/docs/_examples/pipes/ts/app/hero-birthday1.component.ts new file mode 100644 index 0000000000..e8ef259381 --- /dev/null +++ b/public/docs/_examples/pipes/ts/app/hero-birthday1.component.ts @@ -0,0 +1,14 @@ +// Version #1 +// #docregion +import {Component} from 'angular2/core' + +@Component({ + selector: 'hero-birthday', + // #docregion hero-birthday-template + template: `

The hero's birthday is {{ birthday | date }}

` + // #enddocregion hero-birthday-template +}) +export class HeroBirthday { + birthday = new Date(1988,3,15); // April 15, 1988 +} +// #enddocregion \ No newline at end of file diff --git a/public/docs/_examples/pipes/ts/src/app/hero-birthday.ts b/public/docs/_examples/pipes/ts/app/hero-birthday2.component.ts similarity index 55% rename from public/docs/_examples/pipes/ts/src/app/hero-birthday.ts rename to public/docs/_examples/pipes/ts/app/hero-birthday2.component.ts index 2b8c5360b3..e0b357c7f4 100644 --- a/public/docs/_examples/pipes/ts/src/app/hero-birthday.ts +++ b/public/docs/_examples/pipes/ts/app/hero-birthday2.component.ts @@ -1,16 +1,24 @@ -import {bootstrap, Component} from 'angular2/angular2' +// Version #2 // #docregion -@Component({ +import {Component} from 'angular2/core' + +@Component({ selector: 'hero-birthday', +// #docregion template template: `

The hero's birthday is {{ birthday | date:format }}

- ` + ` +// #enddocregion template }) +// #docregion class export class HeroBirthday { birthday = new Date(1988,3,15); // April 15, 1988 + + toggle = true; // start with true == shortDate + get format() { return this.toggle ? 'shortDate' : 'fullDate'} - toggle = true; - toggleFormat() { this.toggle = !this.toggle; } + + toggleFormat() { this.toggle = !this.toggle; } } -// #enddocregion +// #enddocregion class diff --git a/public/docs/_examples/pipes/ts/app/hero-list.component.ts b/public/docs/_examples/pipes/ts/app/hero-list.component.ts new file mode 100644 index 0000000000..169767eac1 --- /dev/null +++ b/public/docs/_examples/pipes/ts/app/hero-list.component.ts @@ -0,0 +1,24 @@ +// #docregion +import {Component} from 'angular2/core'; +import {FetchJsonPipe} from './fetch-json.pipe'; + +@Component({ + selector: 'hero-list', + // #docregion template + template: ` +

Heroes from JSON File

+ +
+ {{hero.name}} +
+ +

Heroes as JSON: + {{'heroes.json' | fetch | json}} +

+ `, + // #enddocregion template + pipes: [FetchJsonPipe] +}) +export class HeroListComponent { + /* I've got nothing to do ;-) */ +} diff --git a/public/docs/_examples/pipes/ts/app/power-boost-calculator.component.ts b/public/docs/_examples/pipes/ts/app/power-boost-calculator.component.ts new file mode 100644 index 0000000000..73151d5362 --- /dev/null +++ b/public/docs/_examples/pipes/ts/app/power-boost-calculator.component.ts @@ -0,0 +1,20 @@ +// #docregion +import {Component} from 'angular2/core'; +import {ExponentialStrengthPipe} from './exponential-strength.pipe'; + +@Component({ + selector: 'power-boost-calculator', + template: ` +

Power Boost Calculator

+
Normal power:
+
Boost factor:
+

+ Super Hero Power: {{power | exponentialStrength: factor}} +

+ `, + pipes: [ExponentialStrengthPipe] +}) +export class PowerBoostCalculator { + power = 5; + factor = 1; +} diff --git a/public/docs/_examples/pipes/ts/src/app/power-booster.ts b/public/docs/_examples/pipes/ts/app/power-booster.component.ts similarity index 64% rename from public/docs/_examples/pipes/ts/src/app/power-booster.ts rename to public/docs/_examples/pipes/ts/app/power-booster.component.ts index 071dbb0a75..73d5c25ca0 100644 --- a/public/docs/_examples/pipes/ts/src/app/power-booster.ts +++ b/public/docs/_examples/pipes/ts/app/power-booster.component.ts @@ -1,8 +1,8 @@ // #docregion -import {Component} from 'angular2/angular2' -import {ExponentialStrengthPipe} from './exponential-strength-pipe' +import {Component} from 'angular2/core'; +import {ExponentialStrengthPipe} from './exponential-strength.pipe'; -@Component({ +@Component({ selector: 'power-booster', template: `

Power Booster

diff --git a/public/docs/_examples/pipes/ts/app/window.extension.d.ts b/public/docs/_examples/pipes/ts/app/window.extension.d.ts new file mode 100644 index 0000000000..0a5a71bbf6 --- /dev/null +++ b/public/docs/_examples/pipes/ts/app/window.extension.d.ts @@ -0,0 +1,3 @@ +interface Window { + fetch(url: string, options? : {}) : Promise +} diff --git a/public/docs/_examples/pipes/ts/src/heroes.json b/public/docs/_examples/pipes/ts/heroes.json similarity index 100% rename from public/docs/_examples/pipes/ts/src/heroes.json rename to public/docs/_examples/pipes/ts/heroes.json diff --git a/public/docs/_examples/pipes/ts/index.html b/public/docs/_examples/pipes/ts/index.html new file mode 100644 index 0000000000..9260301954 --- /dev/null +++ b/public/docs/_examples/pipes/ts/index.html @@ -0,0 +1,23 @@ + + + + + Pipes + + + + + + +

Hero Birthday v.1

+ hero-birthday loading... + + my-app loading ... + + + diff --git a/public/docs/_examples/pipes/ts/plnkr.json b/public/docs/_examples/pipes/ts/plnkr.json new file mode 100644 index 0000000000..cc19097a4a --- /dev/null +++ b/public/docs/_examples/pipes/ts/plnkr.json @@ -0,0 +1,8 @@ +{ + "description": "Pipes", + "files":[ + "!**/*.d.ts", + "!**/*.js", + "!**/*.d.ts"], + "tags": ["pipe"] +} \ No newline at end of file diff --git a/public/docs/_examples/pipes/ts/src/app/app.ts b/public/docs/_examples/pipes/ts/src/app/app.ts deleted file mode 100644 index c223b3e0f3..0000000000 --- a/public/docs/_examples/pipes/ts/src/app/app.ts +++ /dev/null @@ -1,52 +0,0 @@ -import {HeroBirthday as HeroBirthday2} from './hero-birthday'; -import {PowerBooster} from './power-booster'; -import {PowerBoostCalculator} from './power-boost-calculator'; -import {HeroListComponent} from './hero-list-component'; - -// #docregion hero-birthday -import {bootstrap, Component} from 'angular2/angular2' - -@Component({ - selector: 'hero-birthday', - // #docregion hero-birthday-template - template: `

The hero's birthday is {{ birthday | date }}

` - // #enddocregion hero-birthday-template -}) -export class HeroBirthday { - birthday = new Date(1988,3,15); // April 15, 1988 -} - -bootstrap(HeroBirthday); -// #enddocregion hero-birthday - -// #docregion async-message -@Component({ - selector: 'my-hero', - template: 'Message: {{delayedMessage | async}}', -}) -class MyHeroAsyncMessageComponent { - delayedMessage:Promise = new Promise((resolve, reject) => { - setTimeout(() => resolve('You are my Hero!'), 500); - }); -} - -// Initial view: "Message: " -// After 500ms: Message: You are my Hero!" -// #enddocregion async-message - -//// Drives the rest of the pipes chapter examples /// - -@Component({ - selector: 'my-app', - templateUrl: 'app/app.html', - directives:[ - HeroBirthday2, - PowerBooster, PowerBoostCalculator, - MyHeroAsyncMessageComponent, - HeroListComponent] -}) -class AppComponent { - birthday = new Date(1988,3,15); // April 15, 1988 -} -bootstrap(AppComponent); - \ No newline at end of file diff --git a/public/docs/_examples/pipes/ts/src/app/hero-list-component.ts b/public/docs/_examples/pipes/ts/src/app/hero-list-component.ts deleted file mode 100644 index 7d4e0974e7..0000000000 --- a/public/docs/_examples/pipes/ts/src/app/hero-list-component.ts +++ /dev/null @@ -1,25 +0,0 @@ -// #docregion -import {bootstrap, Component, - CORE_DIRECTIVES, FORM_DIRECTIVES} from 'angular2/angular2' - -import {FetchJsonPipe} from './fetch-json-pipe' - -@Component({ - selector: 'hero-list', - template: ` -

Heroes from JSON File

- -
- {{hero.name}} -
- -

Heroes as JSON: - {{'heroes.json' | fetch | json}} -

- `, - directives:[CORE_DIRECTIVES], - pipes: [FetchJsonPipe] -}) -export class HeroListComponent { - /* I've got nothing to do ;-) */ -} diff --git a/public/docs/_examples/pipes/ts/src/app/power-boost-calculator.ts b/public/docs/_examples/pipes/ts/src/app/power-boost-calculator.ts deleted file mode 100644 index 7ffad97c7e..0000000000 --- a/public/docs/_examples/pipes/ts/src/app/power-boost-calculator.ts +++ /dev/null @@ -1,21 +0,0 @@ -// #docregion -import {Component, FORM_DIRECTIVES} from 'angular2/angular2' -import {ExponentialStrengthPipe} from './exponential-strength-pipe' - -@Component({ - selector: 'power-boost-calculator', - template: ` -

Power Boost Calculator

-
Normal power:
-
Boost factor:
-

- Super Hero Power: {{power | exponentialStrength: factor}} -

- `, - pipes: [ExponentialStrengthPipe], - directives: [FORM_DIRECTIVES] -}) -export class PowerBoostCalculator { - power = 5; - factor = 1; -} diff --git a/public/docs/_examples/pipes/ts/src/app/window.extension.d.ts b/public/docs/_examples/pipes/ts/src/app/window.extension.d.ts deleted file mode 100644 index c9ffbfb25a..0000000000 --- a/public/docs/_examples/pipes/ts/src/app/window.extension.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -interface Window { - fetch:(url: string, options?: {}) => Promise -} \ No newline at end of file diff --git a/public/docs/_examples/pipes/ts/src/index.html b/public/docs/_examples/pipes/ts/src/index.html deleted file mode 100644 index 9ee62fad92..0000000000 --- a/public/docs/_examples/pipes/ts/src/index.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - Pipes - - - - - - -

Hero Birthday 1

- loading... -
- loading ... - - - diff --git a/public/docs/_examples/pipes/ts/src/plnkr.json b/public/docs/_examples/pipes/ts/src/plnkr.json deleted file mode 100644 index 2ed4f28391..0000000000 --- a/public/docs/_examples/pipes/ts/src/plnkr.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "files":["!**/*.d.ts", "!**/*.js"] -} \ No newline at end of file diff --git a/public/docs/ts/latest/guide/pipes.jade b/public/docs/ts/latest/guide/pipes.jade index c4ccc5626a..a275b8de87 100644 --- a/public/docs/ts/latest/guide/pipes.jade +++ b/public/docs/ts/latest/guide/pipes.jade @@ -17,7 +17,7 @@ include ../../../../_includes/_util-fns Welcome, Angular pipes, the simple display-value transformations that we can declare in our HTML! - [Live Example](/resources/live-examples/pipes/ts/src/plnkr.html) + [Live Example](/resources/live-examples/pipes/ts/plnkr.html). .l-main-section :marked @@ -25,25 +25,16 @@ include ../../../../_includes/_util-fns A pipe takes in data as input and transforms it to a desired output. We'll illustrate by transforming a component's birthday property into - a human-friendly date. - - Here's a complete mini-app with a `DatePipe`: - - -+makeExample('pipes/ts/src/app/app.ts', 'hero-birthday') + a human-friendly date: ++makeExample('pipes/ts/app/hero-birthday1.component.ts', null, 'app/hero-birthday1.component.ts') :marked - Focus on the component's template to see how we applied the built-in `DatePipe` - while binding the `birthday` property. -+makeExample('pipes/ts/src/app/app.html', 'hero-birthday-template')(format=".") - + Focus on the component's template. ++makeExample('pipes/ts/app/app.component.html', 'hero-birthday-template')(format=".") :marked - Angular [template syntax](./template-syntax.html#pipe) includes a pipe operator ( | ) which we're - using to flow the birthday value on the left through to the `Date` pipe function on the right. - All pipes work this way. + Inside the interpolation expression we flow the component's `birthday` value through the + [pipe operator](./template-syntax.html#pipe) ( | ) to the [Date pipe](../api/common/DatePipe-class.html) + function on the right. All pipes work this way. .l-main-section :marked @@ -64,25 +55,26 @@ include ../../../../_includes/_util-fns We add parameters to a pipe by following the pipe name with a colon ( : ) and then the parameter value (e.g., `currency:'EUR'`). If our pipe accepts multiple parameters, we separate the values with colons (e.g. `slice:1:5`) - We'll modify our birthday example to give the date pipe a format parameter. - The formatted date should display as **04/15/88**. + We'll modify our birthday template to give the date pipe a format parameter. + After formatting the hero's April 15th birthday should display as **04/15/88**. -+makeExample('pipes/ts/src/app/app.html', 'format-birthday')(format=".") ++makeExample('pipes/ts/app/app.component.html', 'format-birthday')(format=".") :marked The parameter value can be any valid [template expression](./template-expression.html#template-expressions) - such as a string literal or a component property. - - Let's revise our example to bind the pipe's format parameter - to the component's `format` property. -+makeExample('pipes/ts/src/app/hero-birthday.ts') - + such as a string literal or a component property. + In other words, we can control the format through a binding the same way we control the birthday value through a binding. + + Let's write a second component that *binds* the pipe's format parameter + to the component's `format` property. Here's the template for that component: ++makeExample('pipes/ts/app/hero-birthday2.component.ts', 'template', 'app/hero-birthday2.component.ts (template)')(format=".") :marked We also added a button to the template and bound its click event to the component's `toggleFormat` method. That method toggles the component's `format` property between a short form ('shortDate') and a longer form ('fullDate'). - ++makeExample('pipes/ts/app/hero-birthday2.component.ts', 'class', 'app/hero-birthday2.component.ts (class)') +:marked As we click the button, the displayed date alternates between "**04/15/1988**" and "**Friday, April 15, 1988**". @@ -90,6 +82,7 @@ include ../../../../_includes/_util-fns figure.image-display img(src='/resources/images/devguide/pipes/date-format-toggle-anim.gif' alt="Date Format Toggle") :marked + .l-sub-section :marked Learn more about the `DatePipes` format options in the [API Docs](../api/core/DatePipe-class.html). @@ -100,7 +93,7 @@ figure.image-display so we can display the birthday in uppercase. The following birthday displays as **APR 15, 1988** -+makeExample('pipes/ts/src/app/app.html', 'chained-birthday') ++makeExample('pipes/ts/app/app.component.html', 'chained-birthday')(format=".") :marked If we pass a parameter to a filter, we have to add parentheses @@ -108,10 +101,14 @@ figure.image-display The following example displays **FRIDAY, APRIL 15, 1988** -+makeExample('pipes/ts/src/app/app.html', 'chained-parameter-birthday') ++makeExample('pipes/ts/app/app.component.html', 'chained-parameter-birthday')(format=".") .l-sub-section - p Future improvements in the template compiler may eliminate the need for parentheses. + :marked + We can add parentheses to alter the evaluation order or + to provide extra clarity: + +makeExample('pipes/ts/app/app.component.html', 'chained-parameter-birthday-parens')(format=".") +:marked .l-main-section :marked @@ -119,43 +116,39 @@ figure.image-display We can write our own custom pipes. - Let's make a custom pipe named `ExponentialStrengthPipe` - that can boost a hero's powers. - - Create a new file, `exponential-strength-pipe.ts`, and enter the following: - -+makeExample('pipes/ts/src/app/exponential-strength-pipe.ts') + Here's a custom pipe named `ExponentialStrengthPipe` that can boost a hero's powers: ++makeExample('pipes/ts/app/exponential-strength.pipe.ts', null, 'app/exponential-strength.pipe.ts') :marked This pipe definition reveals several key points - * We import the `Pipe` decorator from the Angular library (while getting the usual symbols) - * A pipe is a class - * We decorate the class with the `@Pipe` decorator function. + + * A pipe is a class decorated with pipe metadata. + + * The pipe class implements a `transform` method that + takes an input value and an optional array of parameter strings and returns the transformed value. + + * There will be one item in the parameter array for each parameter passed to the pipe + + * We tell Angular that this is a pipe by applying the + `@Pipe` decorator which we import from the core Angular library. + * The `@Pipe` decorator takes an object with a name property whose value is the pipe name that we'll use within a template expression. It must be a valid JavaScript identifier. Our pipe's name is `exponenentialStrength`. - * The pipe class implements a `transform` method - * `transform` takes a value and an optional array of strings. - The value can be of any type but the arguments array must be an array of strings. - * There will be one item in the array for each parameter passed to the pipe - * `transform` returns a modified value that Angular converts to a string. - Now let's create a component to demonstrate our pipe. -+makeExample('pipes/ts/src/app/power-booster.ts') + + Now we need a component to demonstrate our pipe. ++makeExample('pipes/ts/app/power-booster.component.ts',null,'app/power-booster.component.ts') figure.image-display img(src='/resources/images/devguide/pipes/power-booster.png' alt="Power Booster") :marked Two things to note: - 1. We use the pipe in the template expression exactly as we described in the pipe's comments. - We pass the value to transform from the left and give our pipe an exponent parameter of `10`. + 1. We use our custom pipe the same way we use the built-in pipes. 1. We must list our pipe in the @Component decorator's `pipes` array. -.callout.is-critical +.callout.is-helpful header Remember the pipes array! :marked Angular reports an error if we neglect to list our custom pipe. @@ -163,18 +156,18 @@ figure.image-display Angular built-in pipes are pre-registered. Custom pipes must be registered manually. :marked - If we are inclined to try this in a live-coding tool (such a [plunker](http://plnkr.co/)), + If we try the [live code](/resources/live-examples/pipes/ts/plnkr.html) example, we can probe its behavior by changing the value and the optional exponent in the template. ## Power Boost Calculator (extra-credit) It's not much fun updating the template to test our custom pipe. We could upgrade the example to a "Power Boost Calculator" that combines - our pipe and two-way data binding with `ng-model`. + our pipe and two-way data binding with `ngModel`. -+makeExample('pipes/ts/src/app/power-boost-calculator.ts') ++makeExample('pipes/ts/app/power-boost-calculator.component.ts', null, '/app/power-boost-calculator.component.ts') figure.image-display - img(src='/resources/images/devguide/pipes/power-boost-calculator.png' alt="Power Boost Calculator") + img(src='/resources/images/devguide/pipes/power-boost-calculator-anim.gif' alt="Power Boost Calculator") :marked .l-main-section @@ -200,7 +193,7 @@ figure.image-display It is stateful because the pipe maintains a subscription to the input and its returned values depend on that subscription. In the next example, we bind a simple promise to a view with the async pipe. -+makeExample('pipes/ts/src/app/app.ts', 'async-message') ++makeExample('pipes/ts/app/hero-async-message.component.ts', null, 'app/hero-async-message.component.ts') :marked The Async pipe saves boilerplate in the component code. @@ -219,21 +212,36 @@ figure.image-display Here's how we'll decorate our new stateful `FetchJsonPipe` that makes an HTTP `fetch` request and (eventually) displays the data in the server's response: -+makeExample('pipes/ts/src/app/fetch-json-pipe.ts', 'pipe-metadata') ++makeExample('pipes/ts/app/fetch-json.pipe.ts', 'pipe-metadata','app/fetch-json.pipe.ts (metadata)') :marked Immediately below we have the finished pipe. Its input value is an url to an endpoint that returns a JSON file. The pipe makes a one-time async request to the server and eventually receives the JSON response. -+makeExample('pipes/ts/src/app/fetch-json-pipe.ts') ++makeExample('pipes/ts/app/fetch-json.pipe.ts', null, 'app/fetch-json.pipe.ts') :marked - Next we use this pipe in two template bindings where we - 1. display hero names in an `ng-for` repeater - 1. chain the fetched results to the built-in `JsonPipe` that renders - the data in JSON format - -+makeExample('pipes/ts/src/app/hero-list-component.ts') - + Next we demonstrate this pipe in a test component whose template defines two bindings ++makeExample('pipes/ts/app/hero-list.component.ts', 'template', 'app/hero-list.component.ts (template)') +:marked + The component renders like this: figure.image-display img(src='/resources/images/devguide/pipes/hero-list.png' alt="Hero List") +:marked + The first binding is straight forward. An `ngFor` repeater displays the hero names fetched from a json source file. + We're piping the literal file name, "heroes.json", through to the custom `fetch` pipe. + + ### JsonPipe + The second binding uses more pipe chaining. + We take the same fetched results and display the raw hero data in JSON format + by piping to the built-in `JsonPipe`. + +.callout.is-helpful + header Debugging with the json pipe + :marked + The [JsonPipe](https://angular.io/docs/ts/latest/api/common/JsonPipe-class.html) + is an easy way to diagnosis a mysteriously failing data binding. +:marked + Here's the complete component implementation: ++makeExample('pipes/ts/app/hero-list.component.ts', null, 'app/hero-list.component.ts') +:marked .l-main-section :marked diff --git a/public/resources/images/devguide/pipes/power-boost-calculator-anim.gif b/public/resources/images/devguide/pipes/power-boost-calculator-anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..27ff25d1154d2a795b53093b821f203e5f308f91 GIT binary patch literal 54689 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�qzEaYfJ63zK+-b=eI_+n@P;okM;MaX=N#RT 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 V$Rw9+^2sQttn$h%x9m_r06Wm0f{*|J literal 0 HcmV?d00001