include ../../../../_includes/_util-fns .l-main-section :marked # Once Upon a Time Every story starts somewhere. Our story starts where the [QuickStart](../quickstart.html) ends. Follow the "QuickStart" steps. They provide the prerequisites, the folder structure, and the core files for our Tour of Heroes. Copy the "QuickStart" code to a new folder and rename the folder `angular2-tour-of-heroes`. We should have the following structure: code-example. angular2-tour-of-heroes ├── node_modules ├── src | ├── app | | └── app.ts | ├── index.html | └── tsconfig.json └── package.json :marked ### Keep the app running Start the TypeScript compiler and have it watch for changes in one terminal window by typing pre.prettyprint.lang-bash code npm run tsc :marked Now open another terminal window and start the server by typing pre.prettyprint.lang-bash code npm start :marked This command starts the server, launches the app in a browser, and keeps the app running while we continue to build the Tour of Heroes. .l-sub-section :marked These two steps watch all project files. They recompile TypeScript files and re-run the app when any file changes. If the watchers fail to detect renamed or new files, stop these commands in each terminal by typing `CTRL+C` and then re-run them. .l-main-section :marked ## Show our Hero We want to display Hero data in our app Let's add two properties to our `AppComponent`, a `title` property for the application name and a `hero` property for a hero named "Windstorm". ``` class AppComponent { public title = 'Tour of Heroes'; public hero = 'Windstorm'; } ``` :marked Now we update the template in the `@Component` decoration with data bindings to these new properties. code-example(format=""). template: '<h1>{{title}}</h1><h2>{{hero}} details!</h2>' :marked The browser should refresh and display our title and hero. The double curly braces tell our app to read the `title` and `hero` properties from the component and render them. This is the "interpolation" form of one-way data binding. .l-sub-section :marked Learn more about interpolation in the [Displaying Data chapter](../guide/displaying-data). :marked ### Hero object At the moment, our hero is just a name. Our hero needs more properties. Let's convert the `hero` from a literal string to a class. Create a `Hero` class with `id` and `name` properties. Keep this near the top of the `app.ts` file for now. ``` class Hero { id: number; name: string; } ``` Now that we have a `Hero` class, let’s refactor our component’s `hero` property to be of type `Hero`. Then initialize it with an id of `1` and the name, "Windstorm". ``` public hero: Hero = { id: 1, name: 'Windstorm' }; ``` Because we changed the hero from a string to an object, we update the binding in the template to refer to the hero’s `name` property. code-example(format=""). template: '<h1>{{title}}</h1><h2>{{hero.name}} details!</h2>' :marked The browser refreshes and continues to display our hero’s name. ### Adding more HTML Displaying a name is good, but we want to see all of our hero’s properties. We’ll add a `
` for our hero’s `id` property and another `
` for our hero’s `name`. code-example(format="linenums"). template: '<h1>{{title}}</h1><h2>{{hero.name}} details!</h2><div><label>id: </label>{{hero.id}}</div><div><label>name: </label>{{hero.name}}</div>' :marked Uh oh, our template string is getting long. We better take care of that to avoid the risk of making a typo in the template. ### Multi-line template strings We could make a more readable template with string concatenation but that gets ugly fast, it is harder to read, and it is easy to make a spelling error. Instead, let’s take advantage of the template strings feature in ES2015 and TypeScript to maintain our sanity. Change the quotes around the template to back-ticks and put the `

`, `

` and `
` elements on their own lines. code-example(format="linenums"). template:` <h1>{{title}}</h1> <h2>{{hero.name}} details!</h2> <div><label>id: </label>{{hero.id}}</div> <div><label>name: </label>{{hero.name}}</div> ` .callout.is-important header A back-tick is not a single quote :marked **Be careful!** A back-tick (`) looks a lot like a single quote ('). It's actually a completely different character. Back-ticks can do more than demarcate a string. Here we use them in a limited way to spread the template over multiple lines. Everything between the back-ticks at the beginning and end of the template is part of a single template string. .l-main-section :marked ## Editing Our Hero We want to be able to edit the hero name in a textbox. Refactor the hero name `