diff --git a/public/docs/dart/latest/guide/user-input-example1.png b/public/docs/dart/latest/guide/user-input-example1.png
new file mode 100644
index 0000000000..91e2dcfed1
Binary files /dev/null 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
new file mode 100644
index 0000000000..db83a31230
--- /dev/null
+++ b/public/docs/dart/latest/guide/user-input.jade
@@ -0,0 +1,137 @@
+.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.
+ p.
+ For a particular control like an input you can have it call methods on your controller on keyup event like so:
+
+ 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:
+
+ pre.prettyprint.lang-html
+ code.
+ <input #my-name (keyup)>
+ <p>{{my-name.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
+ 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:
+ div(align='center')
+ img(src='user-input-example1.png')
+
+
+.l-main-section
+ h2#section-create-an-array-property Create an array 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.
+
+ pre.prettyprint.linenums.lang-dart
+ code.
+ class TodoList {
+ List<String> todos =
+ ['Eat breakfast', 'Walk dog', 'Breathe', 'Learn Angular'];
+
+ 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.
+
+.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
+ its text to the value.
+
+ pre.prettyprint.linenums.lang-html
+ code.
+ <ul>
+ <li *for="#todo of todos">
+ {{ todo }}
+ </li>
+ </ul>
+
+.l-main-section
+ h2#section-add-todos-to-the-list Add todos to the list via button click
+ p.
+ Now, add a text input and a button for users to add items to the list. As you saw above, you can create a local
+ variable reference in your template with #varname
. Call it #todotext
here.
+
+ pre.prettyprint.lang-html
+ 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.
+
+ 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.
+
+ 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