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

277 lines
8.8 KiB
Plaintext
Raw Normal View History

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
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
})
@Template({
2015-03-03 14:32:06 -05:00
inline: '&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-03-04 19:21:24 -05:00
h3 Component annotations
2015-03-02 09:01:47 -05:00
p.
2015-03-03 16:50:44 -05:00
A component annotation provides metadata about the component.
2015-03-04 19:21:24 -05:00
An annotation can be identified by its at-sign (<code>@</code>).
2015-03-02 09:01:47 -05:00
p.
2015-03-04 19:21:24 -05: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-03-04 19:21:24 -05:00
The <code>@Template</code> annotation defines the HTML that
represents the component. This component uses an inline template,
but you can also have an external template. To use an external template,
specify a <code>url</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
})
@Template({
2015-03-03 14:32:06 -05:00
inline: '&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.