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-03 14:32:06 -05:00
|
|
|
// STEP 1 - Create a project ##########################
|
2015-03-02 17:46:31 -05:00
|
|
|
.l-main-section
|
2015-03-03 14:32:06 -05:00
|
|
|
h2#section-install-angular 1. Create a project
|
2015-03-02 17:46:31 -05:00
|
|
|
|
|
|
|
p.
|
2015-03-03 14:32:06 -05:00
|
|
|
Create a new directory, and put a file named
|
|
|
|
<code>pubspec.yaml</code> file in it.
|
|
|
|
|
|
|
|
pre.prettyprint
|
|
|
|
code.
|
|
|
|
> mkdir hello_world
|
|
|
|
> cd hello_world
|
|
|
|
> vim pubspec.yaml # Use your favorite editor!
|
|
|
|
|
|
|
|
p.
|
|
|
|
In <code>pubspec.yaml</code>, add the angular2 and browser packages as dependencies:
|
2015-03-03 01:22:56 -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.
|
2015-03-03 02:14:05 -05:00
|
|
|
> pub get
|
2015-03-02 21:42:31 -05:00
|
|
|
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?
|
2015-03-03 19:37:56 -05:00
|
|
|
|
|
|
|
p.
|
|
|
|
<b>Note:</b>
|
|
|
|
If you're using Dart 1.9, then your version of angular2
|
|
|
|
will be higher than alpha 6.
|
|
|
|
|
|
|
|
// PENDING: Update once 1.9 is on stable channel.
|
|
|
|
// TODO: Convert the above to a callout.
|
2015-03-03 01:22:56 -05:00
|
|
|
|
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 14:32:06 -05:00
|
|
|
|
|
|
|
pre.prettyprint
|
|
|
|
code.
|
|
|
|
> mkdir web
|
|
|
|
> vim web/main.dart # Use your favorite editor!
|
|
|
|
|
|
|
|
p.
|
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
|
|
|
|
2015-03-03 19:37:56 -05:00
|
|
|
// pre.prettyprint.linenums
|
|
|
|
pre.prettyprint
|
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-03 19:37:56 -05:00
|
|
|
// [PENDING: add line numbers once we can specify where they start]
|
|
|
|
|
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-03 19:37:56 -05:00
|
|
|
Update <code>web/main.dart</code>, adding the following code
|
|
|
|
after the imports:
|
2015-03-02 17:46:31 -05:00
|
|
|
|
2015-03-03 19:37:56 -05:00
|
|
|
pre.prettyprint
|
2015-03-02 17:46:31 -05:00
|
|
|
code.
|
2015-03-02 21:42:31 -05:00
|
|
|
@Component(
|
2015-03-03 14:32:06 -05:00
|
|
|
selector: 'my-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 19:37:56 -05:00
|
|
|
// [PENDING: add line numbers once we can specify where they start]
|
|
|
|
|
|
|
|
p.
|
|
|
|
The code you just added creates a component—a custom element—that
|
|
|
|
has the tag <b><my-app></b>.
|
|
|
|
The Dart code for an Angular component consists of a class
|
|
|
|
(the <b>component controller</b>)
|
|
|
|
that has <code>@Component</code> and <code>@Template</code> annotations.
|
|
|
|
|
|
|
|
// PENDING: Is that correct???
|
|
|
|
|
2015-03-03 01:22:56 -05:00
|
|
|
|
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 19:37:56 -05:00
|
|
|
The <code>@Component</code> annotation defines the HTML tag for the component (the <code>selector</code> value).
|
2015-03-02 17:46:31 -05:00
|
|
|
|
|
|
|
p.
|
2015-03-03 19:37:56 -05:00
|
|
|
The <code>@Template</code> annotation defines the HTML to apply to 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
|
2015-03-02 21:42:31 -05:00
|
|
|
and give it the path to the HTML file.
|
2015-03-02 17:46:31 -05:00
|
|
|
|
2015-03-03 19:37:56 -05:00
|
|
|
pre.prettyprint
|
2015-03-02 17:46:31 -05:00
|
|
|
code.
|
2015-03-02 21:42:31 -05:00
|
|
|
@Component(
|
2015-03-03 14:32:06 -05:00
|
|
|
selector: 'my-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
|
|
|
|
2015-03-03 19:37:56 -05:00
|
|
|
// [PENDING: add line numbers once we can specify where they start]
|
|
|
|
|
2015-03-02 17:46:31 -05:00
|
|
|
p.
|
2015-03-03 19:37:56 -05:00
|
|
|
The annotations above specify an HTML tag of <code><my-app></code>
|
2015-03-03 14:32:06 -05:00
|
|
|
and a template of <code ng-non-bindable><h1>Hello {{ name }}</h1></code>.
|
2015-03-02 21:42:31 -05:00
|
|
|
|
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
|
2015-03-03 19:37:56 -05:00
|
|
|
the double-mustache syntax (<code ng-non-bindable>{{ ... }}</code>).
|
|
|
|
The component controller assigns "Alice" to the name property. When the
|
|
|
|
template renders, "Hello Alice" appears instead of
|
|
|
|
<span ng-non-bindable>"Hello {{ name }}"</span>.
|
2015-03-03 01:22:56 -05:00
|
|
|
|
|
|
|
|
|
|
|
// [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
|
|
|
|
2015-03-03 19:37:56 -05:00
|
|
|
pre.prettyprint
|
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
|
|
|
}
|
|
|
|
|
2015-03-03 19:37:56 -05:00
|
|
|
// [PENDING: add line numbers once we can specify where they start]
|
|
|
|
|
|
|
|
|
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.
|
2015-03-03 19:37:56 -05:00
|
|
|
Add the following code to the bottom of <code>web/main.dart</code>:
|
2015-03-02 17:46:31 -05:00
|
|
|
|
2015-03-03 19:37:56 -05:00
|
|
|
pre.prettyprint
|
2015-03-02 21:42:31 -05:00
|
|
|
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
|
|
|
|
2015-03-03 19:37:56 -05:00
|
|
|
// [PENDING: add line numbers once we can specify where they start]
|
|
|
|
|
|
|
|
p.
|
|
|
|
This code adds 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.
|
|
|
|
|
|
|
|
p.
|
|
|
|
Setting the value of
|
|
|
|
<code>reflector.reflectionCapabilities</code>
|
|
|
|
is a temporary workaround
|
|
|
|
that you can remove once Angular's transformer is available.
|
|
|
|
|
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,
|
2015-03-03 14:32:06 -05:00
|
|
|
which loads <code>main.dart</code> and instantiates the my-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>
|
2015-03-03 14:32:06 -05:00
|
|
|
<my-app></my-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
|
|
|
// 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 19:37:56 -05:00
|
|
|
// TODO: screenshot? embedded 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
|
|
|
Another option is to build and serve the app using <code>pub serve</code>,
|
2015-03-03 19:37:56 -05:00
|
|
|
and then run it by visiting http://localhost:8080/index.html in a browser.
|
2015-03-03 01:22:56 -05:00
|
|
|
The JavaScript generated using this option is large, for now;
|
2015-03-03 19:37:56 -05:00
|
|
|
it'll be much better soon, when Angular's transformer becomes available.
|
2015-03-03 01:22:56 -05:00
|
|
|
|
|
|
|
// [PENDING: Update when transformer is working!]
|
2015-03-02 17:46:31 -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 17:46:31 -05:00
|
|
|
|
2015-03-02 21:42:31 -05:00
|
|
|
p.
|
2015-03-03 19:37:56 -05:00
|
|
|
To try out the latest Angular 2 APIs,
|
|
|
|
first download the <b>Dev channel</b> of Dart from the
|
|
|
|
<a href="https://www.dartlang.org/tools/download-archive/">Dart
|
|
|
|
Download Archive</a>.
|
|
|
|
|
|
|
|
p.
|
|
|
|
Once you have the Dart Dev channel, use <b>pub upgrade</b>
|
|
|
|
to get the latest version of Angular 2.
|
|
|
|
|
2015-03-03 01:22:56 -05:00
|
|
|
|
2015-03-03 19:37:56 -05:00
|
|
|
// [PENDING: really?] Perhaps point to dartlang.org.
|