2015-03-02 21:42:31 -05:00
p.
These instructions assume that you already have the Dart SDK
and any tools you like to use with Dart.
If not, go
<a href="https://www.dartlang.org/tools/download.html">download Dart</a>.
Then return here.
2015-03-02 17:46:31 -05:00
// STEP 1 - Install Angular ##########################
.l-main-section
h2#section-install-angular 1. Install Angular
p.
2015-03-02 21:42:31 -05:00
In a new directory, create a <code>pubspec.yaml</code> file.
Add angular2 and browser as dependencies,
and add the angular2 transformer:
[PENDING: if the transformer isn't working in time,
remove it and use reflection in Dartium instead.
Perhaps require Dart 1.9.]
2015-03-02 17:46:31 -05:00
2015-03-02 21:42:31 -05:00
pre.prettyprint.linenums
code.
name: hello_world
version: 0.0.1
dependencies:
angular2: ">=2.0.0-alpha.6 <3.0.0"
browser: any
transformers:
- angular2
2015-03-02 17:46:31 -05:00
p.
2015-03-02 21:42:31 -05:00
In the same directory, run <code>pub get</code>
to install the angular2 and browser packages
(along with the packages they depend on):
2015-03-02 17:46:31 -05:00
pre.prettyprint.linenums
2015-03-02 21:42:31 -05:00
code.
> pub get
Resolving dependencies... (7.3s)
+ angular2 2.0.0-alpha.6
+ browser 0.10.0+2
+ path 1.3.3
+ stack_trace 1.2.3
Changed 4 dependencies!
2015-03-02 17:46:31 -05:00
2015-03-02 21:42:31 -05:00
p.
PENDING: Create template? Link to pub/pubspec docs?
Is browser really needed?
TODO: make this an invisible note.
2015-03-02 17:46:31 -05:00
// STEP 2 - Import Angular ##########################
.l-main-section
h2#section-transpile 2. Import Angular
p.
2015-03-02 21:42:31 -05:00
Under the same directory, create a <code>web</code> directory.
Create a file under <code>web</code> named <code>main.dart</code>.
Edit <code>web/main.dart</code> to import the angular2 library:
2015-03-02 17:46:31 -05:00
pre.prettyprint.linenums
2015-03-02 21:42:31 -05:00
code import 'package:angular2/angular2.dart';
2015-03-02 17:46:31 -05:00
2015-03-02 21:42:31 -05:00
// STEP 3 - Define a component ##########################
2015-03-02 17:46:31 -05:00
.l-main-section
2015-03-02 21:42:31 -05:00
h2#section-angular-create-account 3. Define a component
2015-03-02 17:46:31 -05:00
p.
2015-03-02 21:42:31 -05:00
A component is a custom HTML element.
In this step, you create a component that has the tag <b><app></b>.
The Dart code for a component consists of a class
with annotations that describe the component.
2015-03-02 17:46:31 -05:00
2015-03-02 21:42:31 -05:00
p.
Update <code>web/main.dart</code> to contain the following code,
which defines the app component:
2015-03-02 17:46:31 -05:00
pre.prettyprint.linenums
code.
2015-03-02 21:42:31 -05:00
import 'package:angular2/angular2.dart';
2015-03-02 17:46:31 -05:00
2015-03-02 21:42:31 -05:00
@Component(
selector: 'app'
)
2015-03-02 17:46:31 -05:00
@Template({
2015-03-02 21:42:31 -05:00
inline: '<h1>Hello {{ name }}</h1>'
2015-03-02 17:46:31 -05:00
})
class AppComponent {
2015-03-02 21:42:31 -05:00
String name = 'Alice';
2015-03-02 17:46:31 -05:00
}
.l-sub-section
2015-03-02 21:42:31 -05:00
h3 Annotations
2015-03-02 17:46:31 -05:00
p.
2015-03-02 21:42:31 -05:00
The <code>@Component</code> annotation defines the HTML tag for the component. [PENDING: component controller?]
The <code>selector</code> property specifies the tag. The <code>selector</code> property is a CSS selector. [PENDING: huh?]
2015-03-02 17:46:31 -05:00
p.
The <code>@Template</code> annotation defines the template to apply to the
component. This component uses an inline template, but external templates are
2015-03-02 21:42:31 -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.
2015-03-02 17:46:31 -05:00
pre.prettyprint.linenums
code.
2015-03-02 21:42:31 -05:00
@Component(
selector: 'app'
)
2015-03-02 17:46:31 -05:00
@Template({
2015-03-02 21:42:31 -05:00
inline: '<h1>Hello {{ name }}</h1>'
2015-03-02 17:46:31 -05:00
})
p.
2015-03-02 21:42:31 -05:00
The annotations above specify an HTML tag of <code><app></app></code>
and a template of <code><h1>Hello {{ name }}</h1></code>.
p TODO: make double-mustaches work in text (they do work in listings)
2015-03-02 17:46:31 -05:00
.l-sub-section
2015-03-02 21:42:31 -05:00
h3 The template and the component controller
2015-03-02 17:46:31 -05:00
p.
2015-03-02 21:42:31 -05:00
A template has access to all the public properties and methods
of its component controller.
[PENDING: Do we really want to use the term "component controller"?
If so, set it up beforehand.
In the original text, what does "the backing" mean, and is it
important that we keep it?]
2015-03-02 17:46:31 -05:00
pre.prettyprint.linenums
2015-03-02 21:42:31 -05:00
code.
2015-03-02 17:46:31 -05:00
class AppComponent {
2015-03-02 21:42:31 -05:00
String name = 'Alice';
2015-03-02 17:46:31 -05:00
}
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
2015-03-02 21:42:31 -05:00
template renders, Alice appears instead of <code>{{ name }}</code>.
[TODO: fix double mustaches]
2015-03-02 17:46:31 -05:00
// STEP 4 - Bootstrap ##########################
.l-main-section
h2#section-transpile 4. Bootstrap
2015-03-02 21:42:31 -05:00
p.
At the bottom of <code>web/main.dart</code>,
add a <code>main()</code> function
that calls Angular's <code>bootstrap()</code> function.
The argument to <code>bootstrap()</code> is the name of the app class
you defined above:
2015-03-02 17:46:31 -05:00
2015-03-02 21:42:31 -05:00
pre.prettyprint.linenums
code.
main() {
bootstrap(AppComponent);
}
p.
[PENDING: change/remove line numbers. They should start at 12.]
2015-03-02 17:46:31 -05:00
// STEP 5 - Declare the HTML ##########################
.l-main-section
h2#section-angular-create-account 5. Declare the HTML
p.
2015-03-02 21:42:31 -05:00
Create a file named <code>web/index.html</code> that contains
the following code,
which loads <code>main.dart</code> and instantiates the app component:
2015-03-02 17:46:31 -05:00
pre.prettyprint.linenums
code.
2015-03-02 21:42:31 -05:00
<!doctype html>
<html>
2015-03-02 17:46:31 -05:00
<head>
<title>Angular 2 Quickstart</title>
</head>
2015-03-02 21:42:31 -05:00
<body>
<app></app>
<script type="application/dart" src="main.dart"></script>
<script src="packages/browser/dart.js"></script>
</body>
</html>
p.
[PENDING: When I select a bunch of code, it looks like I select the line #s too, making me fear that they'll get copied. But pasting doesn't include them. Fix!]
2015-03-02 17:46:31 -05:00
2015-03-02 21:42:31 -05:00
// STEP 5 - Build and run ##########################
.l-main-section
2015-03-02 17:46:31 -05:00
2015-03-02 21:42:31 -05:00
h2#section-angular-run-app 5. Build and run your app
2015-03-02 17:46:31 -05:00
2015-03-02 21:42:31 -05:00
p.
You have many options.
One is to run the <code>pub serve</code>
command in the directory
that contains your app's <code>pubspec.yaml</code> file:
2015-03-02 17:46:31 -05:00
2015-03-02 21:42:31 -05:00
pre.prettyprint.linenums
code.
> pub serve
Serving helloworld on http://localhost:8080
2015-03-02 17:46:31 -05:00
2015-03-02 21:42:31 -05:00
p.
In the browser, go to the index file—for example,
localhost:8080/web/index.html.
[PENDING: This isn't working right now. Fix!]
2015-03-02 17:46:31 -05:00
// WHAT'S NEXT... ##########################
.l-main-section
h2#section-transpile Great Job! Next Step...
2015-03-02 21:42:31 -05:00
p.
Learn some template syntax for extra credit.
[PENDING: really?]