From c4416cfb2c6527749f7a5b7c9ffff699e5aec6ac Mon Sep 17 00:00:00 2001 From: Ward Bell Date: Sat, 31 Oct 2015 17:24:50 -0700 Subject: [PATCH] (docs) User Input - refactored to its own example and support blur event --- .../template-syntax/ts/src/app/app.html | 2 - .../template-syntax/ts/src/app/app.ts | 32 ++-- .../docs/_examples/user-input/ts/.gitignore | 1 + .../docs/_examples/user-input/ts/package.json | 21 +++ .../_examples/user-input/ts/src/app/app.html | 14 ++ .../_examples/user-input/ts/src/app/app.ts | 147 ++++++++++++++++++ .../_examples/user-input/ts/src/index.html | 22 +++ .../_examples/user-input/ts/src/styles.css | 9 ++ .../_examples/user-input/ts/src/tsconfig.json | 11 ++ public/docs/ts/latest/guide/user-input.jade | 41 ++--- .../devguide/user-input/little-tour.png | Bin 20354 -> 15664 bytes 11 files changed, 257 insertions(+), 43 deletions(-) create mode 100644 public/docs/_examples/user-input/ts/.gitignore create mode 100644 public/docs/_examples/user-input/ts/package.json create mode 100644 public/docs/_examples/user-input/ts/src/app/app.html create mode 100644 public/docs/_examples/user-input/ts/src/app/app.ts create mode 100644 public/docs/_examples/user-input/ts/src/index.html create mode 100644 public/docs/_examples/user-input/ts/src/styles.css create mode 100644 public/docs/_examples/user-input/ts/src/tsconfig.json diff --git a/public/docs/_examples/template-syntax/ts/src/app/app.html b/public/docs/_examples/template-syntax/ts/src/app/app.html index 98f95b7f83..3af210b88a 100644 --- a/public/docs/_examples/template-syntax/ts/src/app/app.html +++ b/public/docs/_examples/template-syntax/ts/src/app/app.html @@ -78,9 +78,7 @@ - -
Click me
Click me too!
diff --git a/public/docs/_examples/template-syntax/ts/src/app/app.ts b/public/docs/_examples/template-syntax/ts/src/app/app.ts index fe027bf51d..fd4e4d238e 100644 --- a/public/docs/_examples/template-syntax/ts/src/app/app.ts +++ b/public/docs/_examples/template-syntax/ts/src/app/app.ts @@ -1,13 +1,14 @@ -//**** Referenced in template-syntax and user-input chapters -// #docplaster +// NOT EVERYTHING IS NEEDED BY TEMPLATE-SYNTAX CHAPTER +// Much left-over from support for "User Input" chapter such as +// ClickMeComponent, +// KeyUpComponent, KeyUpComponentV2, KeyUpComponentV3, +// LittleTour, LoopbackComponent, +// TODO: purge extraneous material -// imports formatted for dev guide only -// #docregion little-tour-of-heroes-app -import {bootstrap, Component, CORE_DIRECTIVES} from 'angular2/angular2'; - -// #enddocregion little-tour-of-heroes-app -import { +/// #docplaster + +import {bootstrap, Component, CORE_DIRECTIVES, Input, Output, Directive, ElementRef, EventEmitter, @@ -93,7 +94,6 @@ class LittleHeroComponent { hero: Hero; } -// #docregion click-me-component @Component({ selector: 'click-me', template: '' @@ -103,18 +103,14 @@ class ClickMeComponent { alert('You are my hero!') } } -// #enddocregion click-me-component -// #docregion loop-back-component @Component({ selector: 'loop-back', template: '

{{box.value}}

' }) class LoopbackComponent { } -// #enddocregion loop-back-component -// #docregion key-up-component @Component({ selector: 'key-up', template: ` @@ -129,9 +125,7 @@ class KeyUpComponent { this.values += event.target.value + ' | '; } } -// #enddocregion key-up-component -// #docregion key-up2-component @Component({ selector: 'key-up2', template: ` @@ -146,10 +140,7 @@ class KeyUpComponentV2 { this.values += value + ' | '; } } -// #enddocregion key-up2-component - -// #docregion key-up3-component @Component({ selector: 'key-up3', template: ` @@ -161,10 +152,7 @@ class KeyUpComponentV2 { class KeyUpComponentV3 { values=''; } -// #enddocregion key-up3-component -// #docregion little-tour-of-heroes-app -// #docregion little-tour-of-heroes-component @Component({ selector: 'little-tour', template: ` @@ -185,10 +173,8 @@ class LittleTour { } } } -// #enddocregion little-tour-of-heroes-component bootstrap(LittleTour); -// #enddocregion little-tour-of-heroes-app @Component({ selector: 'my-app', diff --git a/public/docs/_examples/user-input/ts/.gitignore b/public/docs/_examples/user-input/ts/.gitignore new file mode 100644 index 0000000000..6724ce3596 --- /dev/null +++ b/public/docs/_examples/user-input/ts/.gitignore @@ -0,0 +1 @@ +src/**/*.js \ No newline at end of file diff --git a/public/docs/_examples/user-input/ts/package.json b/public/docs/_examples/user-input/ts/package.json new file mode 100644 index 0000000000..245a10d30a --- /dev/null +++ b/public/docs/_examples/user-input/ts/package.json @@ -0,0 +1,21 @@ +{ + "name": "angular2-template-syntax", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "tsc": "tsc -p src -w", + "start": "live-server --open=src" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "angular2": "2.0.0-alpha.44", + "systemjs": "0.19.2" + }, + "devDependencies": { + "live-server": "^0.8.1", + "typescript": "^1.6.2" + } +} diff --git a/public/docs/_examples/user-input/ts/src/app/app.html b/public/docs/_examples/user-input/ts/src/app/app.html new file mode 100644 index 0000000000..9744402d8c --- /dev/null +++ b/public/docs/_examples/user-input/ts/src/app/app.html @@ -0,0 +1,14 @@ + + + + +

keyup loop-back component

+ + + + + + + + + \ No newline at end of file diff --git a/public/docs/_examples/user-input/ts/src/app/app.ts b/public/docs/_examples/user-input/ts/src/app/app.ts new file mode 100644 index 0000000000..c192f7e829 --- /dev/null +++ b/public/docs/_examples/user-input/ts/src/app/app.ts @@ -0,0 +1,147 @@ +// #docplaster + +// imports formatted for dev guide only +// #docregion little-tour-of-heroes-app +import {bootstrap, Component, CORE_DIRECTIVES} from 'angular2/angular2'; + +// #enddocregion little-tour-of-heroes-app + + +// #docregion click-me-component +@Component({ + selector: 'click-me', + template: '' +}) +class ClickMeComponent { + onClickMe(){ + alert('You are my hero!') + } +} +// #enddocregion click-me-component + +// #docregion loop-back-component +@Component({ + selector: 'loop-back', + template: '

{{box.value}}

' +}) +class LoopbackComponent { +} +// #enddocregion loop-back-component + +// #docregion key-up-component +@Component({ + selector: 'key-up', + template: ` +

Give me some keys!

+
+
{{values}}
+ ` +}) +class KeyUpComponent { + values=''; + onKey(event) { + this.values += event.target.value + ' | '; + } +} +// #enddocregion key-up-component + +// #docregion key-up2-component +@Component({ + selector: 'key-up2', + template: ` +

Give me some more keys!

+
+
{{values}}
+ ` +}) +class KeyUpComponentV2 { + values=''; + onKey(value) { + this.values += value + ' | '; + } +} +// #enddocregion key-up2-component + + +// #docregion key-up3-component +@Component({ + selector: 'key-up3', + template: ` +

Type away! Press [enter] when done.

+
+
{{values}}
+ ` +}) +class KeyUpComponentV3 { + values=''; +} +// #enddocregion key-up3-component + + +// #docregion key-up4-component +@Component({ + selector: 'key-up4', + template: ` +

Type away! Press [enter] or mouse away when done.

+
+ +
+
{{values}}
+ ` +}) +class KeyUpComponentV4 { + values=''; +} +// #enddocregion key-up4-component + + +@Component({ + selector: 'my-app', + templateUrl: 'app/app.html', + directives: [ + CORE_DIRECTIVES, + ClickMeComponent, + KeyUpComponent, KeyUpComponentV2, KeyUpComponentV3, KeyUpComponentV4, + LoopbackComponent, + ] +}) +class AppComponent { + + onClickMe(event){ + let evtMsg = event ? ' Event target class is '+ event.target.className : ''; + alert('Click me.'+evtMsg) + } +} + +bootstrap(AppComponent); + +/////////////////////////////////////////////////// + +// #docregion little-tour-of-heroes-app +@Component({ + selector: 'little-tour', + template: ` +

Little Tour of Heroes

+ + +
  • {{hero}}
+ `, + directives: [CORE_DIRECTIVES] +}) +class LittleTour { + heroes=['Windstorm', 'Bombasto', 'Magneta', 'Tornado']; + + addHero(newHero) { + if (newHero.value) { + this.heroes.push(newHero.value); + newHero.value = null; // clear the newHero textbox + } + } +} + +bootstrap(LittleTour); +// #enddocregion little-tour-of-heroes-app diff --git a/public/docs/_examples/user-input/ts/src/index.html b/public/docs/_examples/user-input/ts/src/index.html new file mode 100644 index 0000000000..d59ff63b82 --- /dev/null +++ b/public/docs/_examples/user-input/ts/src/index.html @@ -0,0 +1,22 @@ + + + + User Input + + + + + + + + Loading... +
+ Loading... + + + \ No newline at end of file diff --git a/public/docs/_examples/user-input/ts/src/styles.css b/public/docs/_examples/user-input/ts/src/styles.css new file mode 100644 index 0000000000..b2133e5103 --- /dev/null +++ b/public/docs/_examples/user-input/ts/src/styles.css @@ -0,0 +1,9 @@ +fieldset {border-style:none} +img {height: 100px;} +.box {border: 1px solid black; padding:3px} +.child-div {margin-left: 1em; font-weight: normal} +.hidden {display: none} +.parent-div {margin-top: 1em; font-weight: bold} +.special {font-weight:bold;} +.toe {margin-left: 1em; font-style: italic;} +little-hero {color:blue; font-size: smaller; background-color: Turquoise } \ No newline at end of file diff --git a/public/docs/_examples/user-input/ts/src/tsconfig.json b/public/docs/_examples/user-input/ts/src/tsconfig.json new file mode 100644 index 0000000000..6a58b35a58 --- /dev/null +++ b/public/docs/_examples/user-input/ts/src/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "target": "ES5", + "module": "commonjs", + "sourceMap": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "removeComments": false, + "noImplicitAny": false + } +} \ No newline at end of file diff --git a/public/docs/ts/latest/guide/user-input.jade b/public/docs/ts/latest/guide/user-input.jade index 4225fc7d2f..b739e216b2 100644 --- a/public/docs/ts/latest/guide/user-input.jade +++ b/public/docs/ts/latest/guide/user-input.jade @@ -13,7 +13,7 @@ include ../../../../_includes/_util-fns The syntax is simple. We assign a template expression to the DOM event name, surrounded in parentheses. A click Event Binding makes for a quick illustration. -+makeExample('template-syntax/ts/src/app/app.html', 'click-me-button')(format=".") ++makeExample('user-input/ts/src/app/app.html', 'click-me-button')(format=".") :markdown The `(click)` to the left of the equal sign identifies the button's click event as the **target of the binding**. @@ -28,7 +28,7 @@ include ../../../../_includes/_util-fns -+makeExample('template-syntax/ts/src/app/app.ts', 'click-me-component') ++makeExample('user-input/ts/src/app/app.ts', 'click-me-component') :markdown The `onClickMe` in the template refers to the `onClickMe` method of the component. When the user clicks the button, Angular calls the component's `onClickMe` method. @@ -40,7 +40,7 @@ include ../../../../_includes/_util-fns what the user types back onto the screen. This time we'll both listen to an event and grab the user's input. -+makeExample('template-syntax/ts/src/app/app.ts', 'key-up-component') ++makeExample('user-input/ts/src/app/app.ts', 'key-up-component') :markdown Angular makes an event object available in the **`$event`** variable. The user data we want is in that variable somewhere. @@ -72,7 +72,7 @@ code-example(). Let's demonstrate with a clever keystroke loopback in a single line of template HTML. We don't actually need a dedicated component to do this but we'll make one anyway. -+makeExample('template-syntax/ts/src/app/app.ts', 'loop-back-component') ++makeExample('user-input/ts/src/app/app.ts', 'loop-back-component') :markdown We've declared a template local variable named `box` on the `` element. The `box` variable is a reference to the `` element itself which means we can @@ -91,7 +91,7 @@ code-example(). That local template variable is intriguing. It's clearly easer to get to the textbox with that variable than to go through the `$event` object. Maybe we can re-write our previous "key-up" example using the variable to acquire the user's' input. Let's give it a try. -+makeExample('template-syntax/ts/src/app/app.ts', 'key-up2-component') ++makeExample('user-input/ts/src/app/app.ts', 'key-up2-component') :markdown That sure seems easier. An especially nice aspect of this approach is that our component code gets clean data values from the view. @@ -112,12 +112,20 @@ code-example(). Only then do we update the component's `values` property ... inside the event expression rather than in the component ... because we can ... even if it is a dubious practice. -+makeExample('template-syntax/ts/src/app/app.ts', 'key-up3-component') -.alert.is-helpful - :markdown - We won't transfer the current state of the input box if the user mouses away or clicks - elsewhere on the page. We only update the component's `values` property when the user presses "Enter" - inside the input box. ++makeExample('user-input/ts/src/app/app.ts', 'key-up3-component') + +.l-main-section +:markdown + ## On blur + + Our previous example won't transfer the current state of the input box if the user mouses away and clicks + elsewhere on the page. We only update the component's `values` property when the user presses "Enter" + inside the input box. + + Let's fix that by listening to the input box's blur event as well. + ++makeExample('user-input/ts/src/app/app.ts', 'key-up4-component') + .l-main-section :markdown ## Put it all together @@ -125,7 +133,9 @@ code-example(). We've acquired a small arsenal of event binding techniques in this chapter. Let's put it all together in a micro-app - that can display a list of heroes and add new heroes to that list. + that can display a list of heroes and add new heroes to that list + by typing in the input box and hitting "Enter", clicking "Add", or clicking + elsewhere on the page. figure.image-display img(src='/resources/images/devguide/user-input/little-tour.png' alt="Little Tour of Heroes") @@ -135,7 +145,7 @@ figure.image-display -+makeExample('template-syntax/ts/src/app/app.ts', 'little-tour-of-heroes-app') ++makeExample('user-input/ts/src/app/app.ts', 'little-tour-of-heroes-app') :markdown We've seen almost everything here before. A few things are new or bear repeating. @@ -148,11 +158,6 @@ figure.image-display The Angular workaround is to spell the declaration in "snake case". Angular translates "#new-hero" to `newHero` for template expressions ... which is exactly what we want. - - ### **keyup.enter filter** - We'll add a hero when the user clicks the "Add" button or hits the "Enter" key. We ignore all other keys. - We accept that we might lose the new hero if the user clicks elsewhere or leaves the page - without having hit "Enter" or the "Add" button first. Let's hope the users don't complain. ### **newHero refers to the `` element** We can access the `newHero` variable from any sibling or child of the `` element. diff --git a/public/resources/images/devguide/user-input/little-tour.png b/public/resources/images/devguide/user-input/little-tour.png index 57585058432d9f8f0aede081626f8ff96b3c687a..40389d1a20ddbe2874bee9a838f9dd49c1d95486 100644 GIT binary patch literal 15664 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 literal 20354 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