angular-cn/public/docs/js/latest/quickstart.jade

273 lines
8.8 KiB
Plaintext
Raw Normal View History

2015-04-22 02:48:47 -04:00
.callout.is-helpful
header Angular is still unpackaged and in alpha
p.
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
2015-03-05 03:21:57 -05:00
h2#section-add-es6-shim 2. Clone the quickstart repository
2015-03-04 08:27:48 -05:00
2015-03-05 03:01:24 -05:00
p Within your project, clone the quickstart repository:
2015-03-04 08:27:48 -05:00
2015-03-03 16:50:44 -05:00
pre.prettyprint
2015-03-05 02:59:57 -05:00
code git clone https://github.com/angular/quickstart.git
2015-03-02 09:01:47 -05:00
p.
For the sake of this quickstart we recommend using the
2015-03-05 02:59:57 -05:00
<a href="https://github.com/angular/quickstart"> <code>quickstart</code> GitHub repository</a>.
2015-03-05 02:48:06 -05:00
This repository provides a faster start than building from <code>npm</code>. This repository 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-05 03:13:40 -05:00
of the JavaScript language. This quickstart features AtScript, but you can write Angular in ES5 or ES6 as well.
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 19:21:24 -05:00
AtScript compiles to <strong>ES6</strong>, which is not widely supported in all browsers today.
2015-03-05 03:13:40 -05:00
The <code>es6-shim.js</code> file 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-21 12:25:40 -04:00
The <strong>quickstart</strong> repository includes <code>es6-shim.js</code>.
2015-03-05 02:54:07 -05:00
The es6-shim.js file includes dependencies (such as Traceur) needed to compile
2015-03-04 19:21:24 -05:00
ES6 in the browser. Traceur is an ES6 compiler that transpiles ES6 to ES5 code.
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
<code>app.es6</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
code.
touch index.html
touch app.es6
2015-03-05 01:58:14 -05:00
.alert.is-helpful.
The <code>.es6</code> extension signifies that the file uses ES6 syntax. If your editor doesn't
support syntax highlighting for .es6, use .js.
2015-03-02 22:16:09 -05:00
2015-03-04 19:21:24 -05:00
p Inside of <code>app.es6</code>, 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-04 19:21:24 -05:00
p.
The above import statement uses ES6 module syntax to import three modules from Angular.
These modules 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>&lt;my-app&gt;</code></strong>.
2015-03-02 09:01:47 -05:00
2015-03-03 16:50:44 -05:00
p.
2015-03-04 19:21:24 -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.
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: '&lt;h1&gt;Hello {{ name }}&lt;/h1&gt;'
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-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 &lt;my-app&gt;&lt;/my-app&gt; tag
2015-03-02 09:01:47 -05:00
})
2015-04-21 19:49:24 -04:00
@View({
template: '&lt;h1&gt;Hello {{ name }}&lt;/h1&gt;' // 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>&lt;my-app&gt;</code>
and a template of <code ng-non-bindable>&lt;h1&gt;Hello &#123;&#123; name }}&lt;/h1&gt;</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.
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.
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.
At the bottom of <code>app.es6</code>, call the <code>bootstrap()</code> function
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-03-04 19:21:24 -05:00
Inside the <code>head</code> tag of <code>index.html</code>, include the <code>es6-shim.js</code> file.
(The es6-shim code must load before any application code.)
Then 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
&lt;!-- index.html --&gt;
2015-03-02 09:01:47 -05:00
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Angular 2 Quickstart&lt;/title&gt;
2015-03-05 03:13:40 -05:00
&lt;script src="/quickstart/dist/es6-shim.js"&gt;&lt;/script&gt;
2015-03-02 09:01:47 -05:00
&lt;/head&gt;
&lt;body&gt;
2015-03-02 22:16:09 -05:00
2015-03-02 09:01:47 -05:00
&lt;!-- The app component created in app.es6 --&gt;
2015-03-02 19:53:46 -05:00
&lt;my-app&gt;&lt;/my-app&gt;
2015-03-02 22:16:09 -05:00
2015-03-02 09:01:47 -05:00
&lt;/body&gt;
&lt;/html&gt;
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-03-05 03:19:33 -05:00
To do this, we'll use the System library, which is included in the quickstart repository.
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-03-04 19:21:24 -05:00
Add the following module-loading code to <code>index.html</code>:
2015-03-03 16:50:44 -05:00
2015-03-04 19:21:24 -05:00
pre.prettyprint.linenums
code.
&lt;my-app&gt;&lt;/my-app&gt;
2015-03-04 08:27:48 -05:00
2015-03-04 19:21:24 -05:00
&lt;script&gt;
// Rewrite the paths to load the files
System.paths = {
2015-03-11 20:56:08 -04:00
'angular2/*':'/quickstart/angular2/*.js', // Angular
2015-03-21 12:25:40 -04:00
'rtts_assert/*': '/quickstart/rtts_assert/*.js', // Runtime assertions
2015-03-04 19:21:24 -05:00
'app': 'app.es6' // The my-app component
};
2015-03-03 16:50:44 -05:00
2015-03-04 19:21:24 -05:00
// Kick off the application
System.import('app');
&lt;/script&gt;
2015-03-03 16:50:44 -05:00
2015-03-04 19:21:24 -05:00
p.
The <code>System.paths</code> property above specifies
the paths to the following modules:
ul
li The Angular framework
li Optional assertions for runtime type checking
li The component to display on the page
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
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.