2015-03-03 16:50:44 -05:00
p.
<strong>Angular is still unpackaged and in alpha</strong>. This quickstart does not
reflect the final build process for Angular. The following setup is for those who
want to try out Angular while it is in alpha.
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-03-04 08:27:48 -05:00
The goal of this quickstart is to create a component that renders "Hello Alice" to the page.
To get started, create a new directory.
2015-03-03 16:50:44 -05:00
pre.prettyprint
code.
mkdir angular2_quickstart
cd angular2_quickstart
// STEP 2 - Add the es6-shim ##########################
.l-main-section
h2#section-add-es6-shim 2. Add the es6-shim
2015-03-04 08:27:48 -05:00
2015-03-03 16:50:44 -05:00
p. Within your project, clone the es6-shim repository:
2015-03-04 08:27:48 -05:00
2015-03-03 16:50:44 -05:00
pre.prettyprint
code git clone https://github.com/davideast/conscious.git es6-shim
2015-03-02 09:01:47 -05:00
p.
For the sake of this quickstart we recommend using the
<a href="https://github.com/davideast/conscious"> <code>es6-shim</code> GitHub repository</a>.
2015-03-03 16:50:44 -05:00
This repository will provides a faster start than building from <code>npm</code>. The <code>es6-shim</code> includes Angular and dependencies to compile ES6 in incompatible browsers.
2015-03-02 09:01:47 -05:00
.l-sub-section
2015-03-03 16:50:44 -05:00
h3 ES6, AtScript, and the es6-shim
2015-03-04 08:27:48 -05:00
2015-03-03 16:50:44 -05:00
h4 AtScript
2015-03-02 09:01:47 -05:00
p.
2015-03-04 08:27:48 -05:00
Angular is built with <strong>AtScript</strong>. AtScript is an extension of ES6 (ECMAScript 6), the new specification
2015-03-03 16:50:44 -05:00
of the JavaScript language. This quickstart will be written in AtScript, but it is not required in Angular.
2015-03-04 08:27:48 -05:00
2015-03-03 16:50:44 -05:00
h4 ES6
2015-03-02 09:01:47 -05:00
p.
2015-03-04 08:27:48 -05:00
AtScript compiles to <strong>ES6</strong>. ES6 is not widely supported in all browsers today.
2015-03-03 16:50:44 -05:00
The es6-shim repository allows you to use ES6 or AtScript in the browser.
2015-03-04 08:27:48 -05:00
2015-03-03 16:50:44 -05:00
h4 es6-shim
2015-03-02 09:01:47 -05:00
p.
2015-03-03 16:50:44 -05:00
The <strong>es6-shim</strong> package includes Angular and dependencies needed to compile
2015-03-04 08:27:48 -05:00
ES6 in the browser, such as Traceur. Traceur is an ES6 compiler that transpiles ES6 to ES5 code.
2015-03-03 16:50:44 -05:00
Think of the es6-shim repository as package rather than a project.
2015-03-04 08:27:48 -05:00
2015-03-02 09:01:47 -05:00
// STEP 2 - Import Angular ##########################
.l-main-section
h2#section-transpile 2. Import Angular
p.
2015-03-03 16:50:44 -05:00
Create two files for this quickstart, an <code>index.html</code> and a
2015-03-02 19:53:46 -05:00
<code>app.es6</code>. Both of these files will be at the root of the project.
2015-03-02 09:01:47 -05:00
The <code>.es6</code> extension signifies that the file uses ES6 syntax.
2015-03-04 08:27:48 -05:00
2015-03-03 16:50:44 -05:00
pre.prettyprint.linenums
code touch index.html
| touch app.es6
2015-03-02 22:16:09 -05:00
2015-03-03 16:50:44 -05:00
p Inside of <code>app.es6</code>, use the ES6 module syntax you can import the required modules from Angular.
2015-03-02 09:01:47 -05:00
pre.prettyprint.linenums
code import {Component, Template, bootstrap} from 'angular2/angular2';
2015-03-02 19:53:46 -05:00
p The above import statement will import three modules from Angular. These modules load at runtime.
2015-03-02 09:01:47 -05:00
// STEP 3 - Create a component ##########################
.l-main-section
2015-03-03 16:50:44 -05:00
h2#section-angular-create-account 3. Define a component
2015-03-02 09:01:47 -05:00
p.
2015-03-04 08:27:48 -05:00
Components structure and represent the UI. This quickstart demonstrates the process of creating a component.
2015-03-03 16:50:44 -05:00
The component will have an HTML tag named app,
<strong><code><my-app></my-app></code></strong>.
2015-03-02 09:01:47 -05:00
2015-03-03 16:50:44 -05:00
p.
2015-03-04 08:27:48 -05:00
A component consists of two parts; the <strong>annotation section</strong>
2015-03-03 16:50:44 -05:00
and the <strong>component controller</strong>.
2015-03-02 09:01:47 -05:00
pre.prettyprint.linenums
code.
// Annotation Section
@Component({
2015-03-02 22:16:09 -05:00
selector: 'my-app'
2015-03-02 09:01:47 -05:00
})
@Template({
2015-03-03 14:32:06 -05:00
inline: '<h1>Hello {{ name }}</h1>'
2015-03-02 09:01:47 -05:00
})
// Component Controller
2015-03-02 19:53:46 -05:00
class MyAppComponent {
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
h3 Component Annotations
p.
2015-03-03 16:50:44 -05:00
A component annotation provides metadata about the component.
An annotation can always identified by its at-sign (<code>@</code>).
2015-03-02 09:01:47 -05:00
p.
2015-03-03 16:50:44 -05:00
The <code>@Component</code> annotation defines the HTML tag for the component.
The <code>selector</code> property is a CSS selector which specifies the HTML tag for the component.
2015-03-02 09:01:47 -05:00
p.
2015-03-04 08:27:48 -05:00
The <code>@Template</code> annotation defines the template to apply to the component.
2015-03-03 16:50:44 -05:00
This component uses an inline template, but external templates are
2015-03-02 09:01:47 -05:00
available as well. To use an external template specify a <code>url</code> property
and give it the path to the html file.
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
})
@Template({
2015-03-03 14:32:06 -05:00
inline: '<h1>Hello {{ name }}</h1>' // Defines the inline template for the component
2015-03-02 09:01:47 -05:00
})
p.
2015-03-03 16:50:44 -05:00
The component created above has a HTML tag of <code><my-app></my-app></code>
2015-03-02 19:53:46 -05:00
and a template of <code><h1>Hello <code>{{</code> name }}</h1></code>.
2015-03-02 09:01:47 -05:00
.l-sub-section
h3 Component Controller
p.
The component controller is the backing of the component's template. A component
controller uses ES6 <code>class</code> syntax.
pre.prettyprint.linenums
2015-03-02 22:16:09 -05:00
code.
class MyAppComponent {
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.
The template above binds to a <code>name</code> property through the <code>{{ }}</code>
syntax.The body of the constructor assigns "Alice" to the name property. When the
template renders, Alice will appear instead of <code>{{ name }}</code>.
// STEP 4 - Bootstrap ##########################
.l-main-section
h2#section-transpile 4. Bootstrap
2015-03-03 16:50:44 -05:00
p The last step to load the component on the page. At the bottom of <code>app.es6</code> call the <code>bootstrap()</code> function.
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.
Angular provides a <code>bootstrap</code> function that renders a
component to the page. The <code>bootstrap</code> function takes a
component as a parameter. Any child components inside of the parent
component will render as well.
2015-03-02 09:01:47 -05:00
// STEP 5 - Declare the HTML ##########################
.l-main-section
h2#section-angular-create-account 5. Declare the HTML
p.
2015-03-02 20:05:31 -05:00
Inside of the <code>index.html</code>, include the <code>es6-shim.js</code> file in the <code>head</code> tag.
Now, declare the app component the <code>body</code>. The es6-shim must load before any application 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>
<script src="/es6-shim/dist/es6-shim.js"></script>
</head>
<body>
2015-03-02 22:16:09 -05:00
2015-03-02 09:01:47 -05:00
<!-- The app component created in app.es6 -->
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-03 16:50:44 -05:00
// STEP 6 - Declare the HTML ##########################
.l-main-section
2015-03-02 09:01:47 -05:00
2015-03-03 16:50:44 -05:00
h2#section-load-component-module 5. Load the component
2015-03-04 08:27:48 -05:00
2015-03-03 16:50:44 -05:00
p.
The last step is to load the module for the my-app component.
The es6-shim file comes packaged with the System library. We'll
use System to load the component we created above.
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-03 16:50:44 -05:00
System is a third-party open sourced library. Most browsers today do not support ES6 module loading. System
2015-03-04 08:27:48 -05:00
provides module loading functionality to these browsers.
2015-03-03 16:50:44 -05:00
p.
To load the needed modules, System needs to know where to
load the files from. The paths property in System specifies
the location of the files.
p Tell System about three paths:
ol
li Angular: The Angular framework.
li Runtime assertions: Optional assertions for runtime type checking.
li The my-app component created above: The component to display on the page.
2015-03-04 08:27:48 -05:00
2015-03-02 09:01:47 -05:00
pre.prettyprint.linenums
code.
2015-03-03 16:50:44 -05:00
<my-app></my-app>
<script>
// Rewrite the paths to load the files
System.paths = {
'angular2/*':'/es6-shim/angular2/*.js', // Angular
'rtts_assert/*': '/es6-shim/rtts_assert/*.js', //Runtime assertions
'app': 'app.es6' // The my-app component
};
// Kick off the application
System.import('app');
</script>
2015-03-04 08:27:48 -05:00
2015-03-03 16:50:44 -05:00
// STEP 6 - Declare the HTML ##########################
.l-main-section
h2#section-load-component-module 5. Run a local server
2015-03-02 09:01:47 -05:00
// WHAT'S NEXT... ##########################
.l-main-section
2015-03-03 14:32:06 -05:00
h2#section-transpile Great job! Next step...
2015-03-02 09:01:47 -05:00
2015-03-03 14:32:06 -05:00
p Learn some template syntax for extra credit.