2015-04-22 02:48:47 -04:00
.callout.is-helpful
2015-04-28 15:33:29 -04:00
header Angular is in developer preview
2015-04-22 02:48:47 -04:00
p.
This quickstart does not
2015-04-23 18:16:45 -04:00
reflect the final development process for Angular. The following setup is for those who
2015-04-28 15:33:29 -04:00
want to try out Angular while it is in developer preview.
2015-03-02 09:01:47 -05:00
2015-03-03 16:50:44 -05:00
// STEP 1 - Create a project ##########################
.l-main-section
h2#section-create-project 1. Create a project
2015-03-04 08:27:48 -05:00
2015-03-02 09:01:47 -05:00
p.
2015-04-23 18:16:45 -04:00
This quickstart shows how to write your Angular components in TypeScript. You could instead choose
2015-04-28 15:33:29 -04:00
another language such as <a href="/docs/dart/latest/quickstart.html">Dart</a>, ES5, or ES6.
2015-03-03 16:50:44 -05:00
2015-04-23 18:16:45 -04:00
p.
The goal of this quickstart is to write a component in TypeScript that prints a string.
To get started, clone the TypeScript quickstart repository:
2015-03-04 08:27:48 -05:00
2015-03-03 16:50:44 -05:00
pre.prettyprint
2015-04-23 18:16:45 -04:00
$ git clone https://github.com/angular/ts-quickstart.git
$ cd ts-quickstart
2015-03-02 09:01:47 -05:00
p.
For the sake of this quickstart we recommend using the
2015-04-23 18:16:45 -04:00
<a href="https://github.com/angular/ts-quickstart"> <code>quickstart</code> GitHub repository</a>.
This repository provides a faster start than building from <code>npm</code>.
This repository includes the Angular distribution and type definitions for TypeScript.
2015-03-04 08:27:48 -05:00
2015-04-23 18:16:45 -04:00
// STEP 2 - Start the TypeScript compiler ##########################
.l-main-section
h2#start-tsc 2. Run the TypeScript compiler
2015-03-04 08:27:48 -05:00
2015-04-23 18:16:45 -04:00
p.
Since the browser doesn't understand TypeScript code, we need to run a compiler to translate
your code to browser-compliant JavaScript as you work. This quickstart uses the TypeScript
compiler in <code>--watch</code> mode, but it is also possible to do the translation in the browser as files
are loaded, or configure your editor or IDE to do it.
p.
The repository includes a file <code>tsconfig.json</code>.
Many tools — including the TypeScript compiler —
know to read this file so we don't need to configure them or add command-line options.
2015-03-04 08:27:48 -05:00
2015-04-23 18:16:45 -04:00
pre.prettyprint
# We need to use an unreleased version of TypeScript
$ npm install -g mhegazy/typescript#v1.5-beta
$ tsc --watch
2015-03-02 09:01:47 -05:00
2015-03-05 01:09:03 -05:00
// STEP 3 - Import Angular ##########################
2015-03-02 09:01:47 -05:00
.l-main-section
2015-03-05 01:09:03 -05:00
h2#section-transpile 3. Import Angular
2015-03-02 09:01:47 -05:00
p.
2015-03-04 19:21:24 -05:00
Create two files, <code>index.html</code> and
2015-04-23 18:16:45 -04:00
<code>app.ts</code>, both at the root of the project:
2015-03-04 08:27:48 -05:00
2015-03-04 19:21:24 -05:00
pre.prettyprint
2015-04-23 18:16:45 -04:00
$ touch index.html
$ touch app.ts
2015-03-02 22:16:09 -05:00
2015-04-23 18:16:45 -04:00
p Inside of <code>app.ts</code>, import the type definitions from Angular:
pre.prettyprint
code /// <reference path="typings/angular2/angular2.d.ts" />
2015-03-02 09:01:47 -05:00
2015-04-23 18:16:45 -04:00
p Now your editor should be able to complete the available imports:
pre.prettyprint
code import {Component, View, bootstrap} from 'angular2/angular2';
2015-03-02 09:01:47 -05:00
2015-03-04 19:21:24 -05:00
p.
2015-04-23 18:16:45 -04:00
The above import statement uses ES6 module syntax to import three symbols from the Angular module.
The module will load at runtime.
2015-03-02 09:01:47 -05:00
2015-03-05 01:09:03 -05:00
// STEP 4 - Create a component ##########################
2015-03-02 09:01:47 -05:00
.l-main-section
2015-03-05 01:09:03 -05:00
h2#section-angular-create-account 4. Define a component
2015-03-02 09:01:47 -05:00
p.
2015-03-04 19:21:24 -05:00
Components structure and represent the UI. This quickstart demonstrates the process of creating a component
that has an HTML tag named <strong><code><my-app></code></strong>.
2015-03-02 09:01:47 -05:00
2015-03-03 16:50:44 -05:00
p.
2015-04-23 18:16:45 -04:00
A component consists of two parts, the <strong>component controller</strong>
which is an ES6 class, and the <strong>decorators</strong> which tell Angular
how to place the component into the page.
2015-03-02 09:01:47 -05:00
pre.prettyprint.linenums
code.
2015-03-04 19:21:24 -05:00
// Annotation section
2015-03-02 09:01:47 -05:00
@Component({
2015-03-02 22:16:09 -05:00
selector: 'my-app'
2015-03-02 09:01:47 -05:00
})
2015-04-21 19:49:24 -04:00
@View({
template: '<h1>Hello {{ name }}</h1>'
2015-03-02 09:01:47 -05:00
})
2015-03-04 19:21:24 -05:00
// Component controller
2015-03-02 19:53:46 -05:00
class MyAppComponent {
2015-04-23 18:16:45 -04:00
name: string;
2015-03-02 09:01:47 -05:00
constructor() {
2015-03-03 14:32:06 -05:00
this.name = 'Alice';
2015-03-02 09:01:47 -05:00
}
}
.l-sub-section
2015-04-21 19:49:24 -04:00
h3 @Component and @View annotations
2015-03-02 09:01:47 -05:00
p.
2015-04-21 19:49:24 -04:00
A component annotation describes details about the component. An annotation can be identified by its at-sign (<code>@</code>).
2015-03-02 09:01:47 -05:00
p.
2015-04-21 19:49:24 -04:00
The <code>@Component</code> annotation defines the HTML tag for the component by specifying the component's CSS selector.
2015-03-02 09:01:47 -05:00
p.
2015-04-21 19:49:24 -04:00
The <code>@View</code> annotation defines the HTML that represents the component. The component you wrote uses an inline template, but you can also have an external template. To use an external template, specify a <code>templateUrl</code> property and give it the path to the HTML file.
2015-03-02 09:01:47 -05:00
pre.prettyprint.linenums
code.
@Component({
2015-03-03 16:50:44 -05:00
selector: 'my-app' // Defines the <my-app></my-app> tag
2015-03-02 09:01:47 -05:00
})
2015-04-21 19:49:24 -04:00
@View({
template: '<h1>Hello {{ name }}</h1>' // Defines the inline template for the component
2015-03-02 09:01:47 -05:00
})
p.
2015-03-04 19:21:24 -05:00
The annotations above specify an HTML tag of <code><my-app></code>
and a template of <code ng-non-bindable><h1>Hello {{ name }}</h1></code>.
2015-03-02 09:01:47 -05:00
.l-sub-section
2015-03-04 19:21:24 -05:00
h3 The template and the component controller
2015-03-02 09:01:47 -05:00
p.
2015-04-23 18:16:45 -04:00
The component controller is the backing of the component's template. This component
controller uses TypeScript <code>class</code> syntax.
2015-03-02 09:01:47 -05:00
pre.prettyprint.linenums
2015-03-02 22:16:09 -05:00
code.
class MyAppComponent {
2015-04-23 18:16:45 -04:00
name: string;
2015-03-02 09:01:47 -05:00
constructor() {
2015-03-03 14:32:06 -05:00
this.name = 'Alice';
2015-03-02 09:01:47 -05:00
}
}
p.
Templates read from their component controllers. Templates have access to any properties
or functions placed on the component controller.
p.
2015-03-04 19:21:24 -05:00
The template above binds to a <code>name</code> property through
the double-mustache syntax (<code ng-non-bindable>{{ ... }}</code>).
The body of the constructor assigns "Alice" to the name property. When the
template renders, "Hello Alice" appears instead of
<span ng-non-bindable>"Hello {{ name }}"</span>.
2015-03-02 09:01:47 -05:00
2015-03-05 01:09:03 -05:00
// STEP 5 - Bootstrap ##########################
2015-03-02 09:01:47 -05:00
.l-main-section
2015-03-05 01:09:03 -05:00
h2#section-transpile 5. Bootstrap
2015-03-02 09:01:47 -05:00
2015-03-04 19:21:24 -05:00
p.
2015-04-23 18:16:45 -04:00
At the bottom of <code>app.ts</code>, call the <code>bootstrap()</code> function
2015-03-04 19:21:24 -05:00
to load your new component into its page:
2015-03-04 08:27:48 -05:00
2015-03-03 16:50:44 -05:00
pre.prettyprint.linenums
code bootstrap(MyAppComponent);
2015-03-04 08:27:48 -05:00
2015-03-03 16:50:44 -05:00
p.
2015-03-04 19:21:24 -05:00
The <code>bootstrap()</code> function takes a
component as a parameter, enabling the component
(as well as any child components it contains) to render.
2015-03-02 09:01:47 -05:00
2015-03-05 01:09:03 -05:00
// STEP 6 - Declare the HTML ##########################
2015-03-02 09:01:47 -05:00
.l-main-section
2015-03-05 01:09:03 -05:00
h2#section-angular-create-account 6. Declare the HTML
2015-03-02 09:01:47 -05:00
p.
2015-04-23 18:16:45 -04:00
Inside the <code>head</code> tag of <code>index.html</code>,
include the traceur-runtime and the Angular bundle.
Instantiate the <code>my-app</code> component in the <code>body</code>.
2015-03-02 09:01:47 -05:00
pre.prettyprint.linenums
code.
2015-03-02 19:53:46 -05:00
<!-- index.html -->
2015-03-02 09:01:47 -05:00
<html>
<head>
<title>Angular 2 Quickstart</title>
2015-04-23 18:16:45 -04:00
<script src="https://github.jspm.io/jmcriffey/bower-traceur-runtime@0.0.87/traceur-runtime.js"></script>
<script src="bundle/angular2.dev.js"></script>
2015-03-02 09:01:47 -05:00
</head>
<body>
2015-03-02 22:16:09 -05:00
2015-04-23 18:16:45 -04:00
<!-- The app component created in app.ts -->
2015-03-02 19:53:46 -05:00
<my-app></my-app>
2015-03-02 22:16:09 -05:00
2015-03-02 09:01:47 -05:00
</body>
</html>
2015-03-05 01:09:03 -05:00
// STEP 7 - Declare the HTML ##########################
2015-03-03 16:50:44 -05:00
.l-main-section
2015-03-02 09:01:47 -05:00
2015-03-05 01:09:03 -05:00
h2#section-load-component-module 7. Load the component
2015-03-04 08:27:48 -05:00
2015-03-03 16:50:44 -05:00
p.
2015-03-04 19:21:24 -05:00
The last step is to load the module for the <code>my-app</code> component.
2015-04-23 18:16:45 -04:00
To do this, we'll use the System library.
2015-03-04 08:27:48 -05:00
2015-03-03 16:50:44 -05:00
.l-sub-section
h3 System.js
2015-03-04 08:27:48 -05:00
2015-03-02 09:01:47 -05:00
p.
2015-03-05 03:19:33 -05:00
<a href="https://github.com/systemjs/systemjs">System</a> is a third-party open-source library that
2015-03-04 19:21:24 -05:00
adds ES6 module loading functionality to browsers.
2015-03-04 08:27:48 -05:00
2015-03-03 16:50:44 -05:00
p.
2015-04-23 18:16:45 -04:00
Add the System.js dependency in the <code><head></code> tag:
2015-03-03 16:50:44 -05:00
2015-03-04 19:21:24 -05:00
pre.prettyprint.linenums
code.
2015-04-23 18:16:45 -04:00
<head>
<script src="https://jspm.io/system@0.16.js"></script>
</head>
2015-03-03 16:50:44 -05:00
2015-03-04 19:21:24 -05:00
p.
2015-04-23 18:16:45 -04:00
Add the following module-loading code before the <code><my-app></code> tag:
pre.prettyprint.linenums
code.
<script>System.import('app');</script>
<my-app></my-app>
2015-03-04 08:27:48 -05:00
2015-03-03 16:50:44 -05:00
2015-03-05 01:09:03 -05:00
// STEP 8 - Run a local server ##########################
2015-03-04 19:21:24 -05:00
.l-main-section
2015-03-03 16:50:44 -05:00
2015-03-05 01:09:03 -05:00
h2#section-load-component-module 8. Run a local server
2015-03-02 09:01:47 -05:00
2015-03-05 01:48:32 -05:00
p Run a local HTTP server, and view <code>index.html</code>.
p.
If you don't already have an HTTP server,
you can install one using <code>npm install -g http-server</code>.
(If that results in an access error, then you might need to use
<code><b>sudo</b> npm ...</code>)
For example:
pre.prettyprint.code.
# From the directory that contains index.html:
npm install -g http-server # Or sudo npm install -g http-server
http-server # Creates a server at localhost:8080
# In a browser, visit localhost:8080/index.html
2015-03-02 09:01:47 -05:00
// WHAT'S NEXT... ##########################
.l-main-section
2015-03-11 20:56:08 -04:00
h2#section-transpile Great job! We'll have the next steps out soon.