diff --git a/public/docs/dart/latest/guide/user-input-example1.png b/public/docs/dart/latest/guide/user-input-example1.png index 91e2dcfed1..822abea3c9 100644 Binary files a/public/docs/dart/latest/guide/user-input-example1.png and b/public/docs/dart/latest/guide/user-input-example1.png differ diff --git a/public/docs/dart/latest/guide/user-input.jade b/public/docs/dart/latest/guide/user-input.jade index a32b6b8b9a..7936af57f2 100644 --- a/public/docs/dart/latest/guide/user-input.jade +++ b/public/docs/dart/latest/guide/user-input.jade @@ -1,40 +1,52 @@ .l-main-section p. - You can make your application respond to user input by associating events with functions in your controller - using the event syntax using () to surround the name of an event. + Use the event syntax (eventName) to + make your application respond to user input. p. - For a particular control like an input you can have it call methods on your controller on keyup event like so: + You can specify the event handler—a method in the component controller—like this: pre.prettyprint.lang-html code. <input (keyup)="myControllerMethod()"> p. - As in previous examples, you can make element references available to other parts of the template as a local - variable using the # syntax. With this and events, we can do the old "update text as you type" example: + As in previous examples, you can make element references available to + other parts of the template as a local + variable using the # syntax. + Using # and events, + you can write the old "update text as you type" example: + pre.prettyprint.lang-html code. - <input #my-name (keyup)> - <p>{{my-name.value}}</p> + <input #myname (keyup)> + <p>{{myname.value}}</p> p.text-body(ng-non-bindable). - The #my-name creates a local variable in the template that we'll refer to below in the - <p> element. The (keyup) tells Angular to trigger updates when it gets a keyup - event. And the {{my-name.value}} binds the text node of the <p> element to the + In that example, #myname creates a local variable in the template that + the <p> element can refer to. + The (keyup) tells Angular to trigger updates when it gets a keyup + event. And {{myname.value}} binds the text node of the + <p> element to the input's value property. - p Let's do something a little more complex where users enter items and add them to a list like this: + + p. + Let's do something a little more complex, where the user enters items + that the app adds to a list: figure.image-display img(src='user-input-example1.png') .l-main-section - h2#section-create-an-array-property Create an array property + h2#section-create-an-array-property Create a list property p. - With the default bootstrapping in place, create a TodoController class that will manage interactions with the - list. Inside TodoController, add an array with an initial list of items. Then add a method that pushes new items - on the array when called. + With the default files in place, + create a TodoController class to manage interactions with the + list. Inside TodoController, add a list with some initial items. + Then add a method that adds new items + to the list. - pre.prettyprint.linenums.lang-dart + pre.prettyprint.lang-dart code. class TodoList { List<String> todos = @@ -42,21 +54,26 @@ addTodo(String todo) { todos.add(todo); - } + } + } .callout.is-helpful header Production Best Practice p. - As with the previous example, in a production application you will separate your model out into another class - and inject it into TodoController. We've omitted it here for brevity. + As shown in the previous example, a production application you would + separate the model out into another class + and inject it into TodoController. + We've omitted that here for brevity. + +

.l-main-section h2#section-display-the-list-of-todos Display the list of todos p. - Using the *for iterator, create an <li> for each item in the todos array and set + Using the *for iterator, create an <li> for each item in the todos list and set its text to the value. - pre.prettyprint.linenums.lang-html + pre.prettyprint.lang-html code. <ul> <li *for="#todo of todos"> @@ -74,64 +91,124 @@ code. <input #todotext> p. - Lastly, specify the target of the click event binding as your controller's addTodo() method and pass - it the value. Since you created a reference called todotext, you can get the value with - todotext.value. + Specify the target of the click event binding as your controller's + addTodo() method and pass + it the value. Since you created a reference called todotext, + you can get the value with todotext.value. pre.prettyprint.lang-html code. <button (click)="addTodo(todotext.value)">Add Todo</button> - p And then create the doneTyping() method on TodoList and handle adding the todo text. + p. + To make pressing Enter do something useful, + you can add a keyup event handler to the input field. + This event handler needs to use APIs defined in + dart:html, + so be sure to import that library. + + .code-box + pre.prettyprint.lang-dart(data-name="todo_list.dart") + code. + <input #todotext (keyup)="doneTyping($event)"> + ... + doneTyping(KeyboardEvent event) { + if (event.keyCode == KeyCode.ENTER) { + InputElement e = event.target; + addTodo(e.value); + e.value = null; + } + } + pre.prettyprint.lang-dart(data-name="main.dart") + code. + library user_input; + + import 'dart:html'; + ... - pre.prettyprint.lang-dart - code. - doneTyping(KeyboardEvent event) { - if (event.which == 13) { - InputElement e = event.target; - addTodo(e.value); - e.value = null; - } - } .l-main-section - h2#section-final-code Final Code - p Here's the final todo_list.dart - pre.prettyprint.lang-dart - code. - part of user_input; - - @Component( - selector: 'todo-list' - ) - @View( - // Without r before ''' (a raw string), $event breaks Angular! - // An alternative is to use \$event instead. - template: ''' - <ul> - <li *for="#todo of todos"> - {{ todo }} - </li> - </ul> - - <input #todotext (keyup)="doneTyping($event)"> - <button (click)="addTodo(todotext.value)">Add Todo</button> - ''', - directives: const[For] - ) - class TodoList { - List<String> todos = - ['Eat breakfast', 'Walk dog', 'Breathe', 'Learn Angular']; - - addTodo(String todo) { - todos.add(todo); - } - - doneTyping(KeyboardEvent event) { - if (event.which == 13) { - InputElement e = event.target; - addTodo(e.value); - e.value = null; - } - } - } \ No newline at end of file + h2#section-final-code Final code + + .code-box + pre.prettyprint.lang-dart(data-name="todo_list.dart") + code. + // web/todo_list.dart + part of user_input; + + @Component( + selector: 'todo-list' + ) + @View( + // Without r before ''' (a raw string), $event breaks Angular. + // An alternative to a raw string is to use \$event instead. + template: ''' + <ul> + <li *for="#todo of todos"> + {{ todo }} + </li> + </ul> + + <input #todotext (keyup)="doneTyping($event)"> + <button (click)="addTodo(todotext.value)">Add Todo</button> + ''', + directives: const[For] + ) + class TodoList { + List<String> todos = + ['Eat breakfast', 'Walk dog', 'Breathe', 'Learn Angular']; + + addTodo(String todo) { + todos.add(todo); + } + + doneTyping(KeyboardEvent event) { + if (event.keyCode == KeyCode.ENTER) { + InputElement e = event.target; + addTodo(e.value); + e.value = null; + } + } + } + pre.prettyprint.lang-dart(data-name="main.dart") + code. + // web/main.dart + library user_input; + + import 'dart:html'; + + import 'package:angular2/angular2.dart'; + import 'package:angular2/src/reflection/reflection.dart' show reflector; + import 'package:angular2/src/reflection/reflection_capabilities.dart' show ReflectionCapabilities; + + part 'todo_list.dart'; + + main() { + reflector.reflectionCapabilities = new ReflectionCapabilities(); + bootstrap(TodoList); + } + pre.prettyprint.lang-html(data-name="html") + code. + <!-- web/index.html --> + <!DOCTYPE html> + <html> + <head> + <link rel="stylesheet" href="style.css"> + </head> + <body> + + <todo-list></todo-list> + + <script type="application/dart" src="main.dart"></script> + <script src="packages/browser/dart.js"></script> + </body> + </html> + pre.prettyprint.lang-yaml(data-name="yaml") + code. + # pubspec.yaml + name: user_input + description: Dart version of Angular 2 example, Responding to User Input + version: 0.0.1 + dependencies: + angular2: 2.0.0-alpha.20 + browser: any