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.
2015-03-03 01:22:56 -05:00
Add angular2 and browser as dependencies:
// [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
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
2015-03-03 01:22:56 -05:00
pre.prettyprint
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-03 01:22:56 -05:00
// 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-03 01:22:56 -05:00
Still in the same directory, create a <code>web</code> directory.
2015-03-02 21:42:31 -05:00
Create a file under <code>web</code> named <code>main.dart</code>.
2015-03-03 01:22:56 -05:00
Edit <code>web/main.dart</code> to import the angular2 library
and (for now) two reflection libraries:
2015-03-02 17:46:31 -05:00
pre.prettyprint.linenums
2015-03-03 01:22:56 -05:00
code.
import 'package:angular2/angular2.dart';
2015-03-02 17:46:31 -05:00
2015-03-03 01:22:56 -05:00
// These imports will go away soon:
import 'package:angular2/src/reflection/reflection.dart' show reflector;
import 'package:angular2/src/reflection/reflection_capabilities.dart' show ReflectionCapabilities;
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.
2015-03-03 01:22:56 -05:00
Update <code>web/main.dart</code> to add the following code,
2015-03-02 21:42:31 -05:00
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
@Component(
2015-03-03 01:22:56 -05:00
selector: 'app'
2015-03-02 21:42:31 -05:00
)
2015-03-03 01:22:56 -05:00
@Template(
2015-03-02 21:42:31 -05:00
inline: '<h1>Hello {{ name }}</h1>'
2015-03-03 01:22:56 -05:00
)
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
}
2015-03-03 01:22:56 -05:00
// TODO: Change or omit line numbers.
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-03 01:22:56 -05:00
The <code>@Component</code> annotation defines the HTML tag for the component.
The <code>selector</code> property specifies the tag. The <code>selector</code> property is a CSS selector.
// [PENDING: that last paragraph needs work!]
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(
2015-03-03 01:22:56 -05:00
selector: 'app'
2015-03-02 21:42:31 -05:00
)
2015-03-03 01:22:56 -05:00
@Template(
2015-03-02 21:42:31 -05:00
inline: '<h1>Hello {{ name }}</h1>'
2015-03-03 01:22:56 -05:00
)
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>.
2015-03-03 01:22:56 -05:00
// TODO: In the preceding paragraph, that should be rendered as {{ name }}, like in the listing.
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.
2015-03-03 01:22:56 -05:00
The template above binds to a <code>name</code> property through
the double-mustache syntax (<code>{{ }}</code>).
The body of the constructor assigns "Alice" to the name property. When the
template renders, Alice appears instead of <code>{{ name }}</code>.
// TODO: fix double mustaches above.
// [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
}
// 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
2015-03-03 01:22:56 -05:00
you defined above.
p.
For now, you also need to set the value of
<code>reflector.reflectionCapabilities</code>.
2015-03-02 17:46:31 -05:00
2015-03-02 21:42:31 -05:00
pre.prettyprint.linenums
code.
main() {
2015-03-03 01:22:56 -05:00
// Temporarily needed.
reflector.reflectionCapabilities = new ReflectionCapabilities();
2015-03-02 21:42:31 -05:00
bootstrap(AppComponent);
}
2015-03-03 01:22:56 -05:00
// [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>
2015-03-03 01:22:56 -05:00
2015-03-02 21:42:31 -05:00
<script type="application/dart" src="main.dart"></script>
<script src="packages/browser/dart.js"></script>
</body>
</html>
2015-03-02 17:46:31 -05:00
2015-03-03 01:22:56 -05:00
// [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. Can we fix that?]
// STEP 6 - Build and run ##########################
2015-03-02 21:42:31 -05:00
.l-main-section
2015-03-02 17:46:31 -05:00
2015-03-03 01:22:56 -05:00
h2#section-angular-run-app 6. Build and run your app
2015-03-02 17:46:31 -05:00
2015-03-02 21:42:31 -05:00
p.
2015-03-03 01:22:56 -05:00
You have several options for running your app.
The quickest and easiest, for now,
is to open your project in <b>Dart Editor</b>,
right-click <code>web/index.html</code>,
and choose <b>Open in Dartium</b>.
2015-03-02 17:46:31 -05:00
2015-03-03 01:22:56 -05:00
// TODO: screenshot?
2015-03-02 17:46:31 -05:00
2015-03-02 21:42:31 -05:00
p.
2015-03-03 01:22:56 -05:00
Another option is to build and serve the app using <code>pub serve</code>,
and then to run it by visiting http://localhost:8080/index.html in a browser.
The JavaScript generated using this option is large, for now;
it'll be much better soon, when a transformer becomes available
to convert the reflection code from dynamic to static code.
// [PENDING: Update when transformer is working!]
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.
2015-03-03 01:22:56 -05:00
// [PENDING: really?]