262 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			262 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 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.
 | |
| 
 | |
| // STEP 1 - Create a project ##########################
 | |
| .l-main-section
 | |
|   h2#section-install-angular 1. Create a project
 | |
| 
 | |
|   p.
 | |
|     Create a new directory, and put a file named
 | |
|     <code>pubspec.yaml</code> 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:
 | |
| 
 | |
|   pre.prettyprint.linenums.lang-basic
 | |
|     code.
 | |
|       name: hello_world
 | |
|       version: 0.0.1
 | |
|       dependencies:
 | |
|         angular2: ">=2.0.0-alpha.6 <3.0.0"
 | |
|         browser: any
 | |
|   p.
 | |
|     In the same directory, run <code>pub get</code>
 | |
|     to install the angular2 and browser packages
 | |
|     (along with the packages they depend on):
 | |
| 
 | |
|   pre.prettyprint.lang-basic
 | |
|     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!
 | |
| 
 | |
|   // PENDING: Create template? Link to pub/pubspec docs?
 | |
|   // Is browser really needed?
 | |
| 
 | |
|   .alert.is-helpful.
 | |
|     If you're using Dart's Dev channel, then your version of angular2
 | |
|     will be higher than alpha 6. That's fine.
 | |
| 
 | |
|   // PENDING: Update once 1.9 is on stable channel.
 | |
| 
 | |
| 
 | |
| // STEP 2 - Import Angular ##########################
 | |
| .l-main-section
 | |
|   h2#section-transpile 2. Import Angular
 | |
| 
 | |
|   p.
 | |
|     Still in the same directory, create a <code>web</code> directory.
 | |
|     Create a file under <code>web</code> named <code>main.dart</code>.
 | |
| 
 | |
|   pre.prettyprint
 | |
|     code.
 | |
|       > mkdir web
 | |
|       > vim web/main.dart  # Use your favorite editor!
 | |
| 
 | |
|   p.
 | |
|     Edit <code>web/main.dart</code> to import the angular2 library
 | |
|     and (for now) two reflection libraries:
 | |
| 
 | |
|   // pre.prettyprint.linenums
 | |
|   pre.prettyprint
 | |
|     code.
 | |
|       import 'package:angular2/angular2.dart';
 | |
| 
 | |
|       // 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;
 | |
| 
 | |
|   // [PENDING: add line numbers once we can specify where they start]
 | |
| 
 | |
| // STEP 3 - Define a component ##########################
 | |
| .l-main-section
 | |
| 
 | |
|   h2#section-angular-create-account 3. Define a component
 | |
| 
 | |
|   p.
 | |
|     Update <code>web/main.dart</code>, adding the following code
 | |
|     after the imports:
 | |
| 
 | |
|   pre.prettyprint
 | |
|     code.
 | |
|       @Component(
 | |
|         selector: 'my-app'
 | |
|       )
 | |
|       @Template(
 | |
|         inline: '<h1>Hello {{ name }}</h1>'
 | |
|       )
 | |
|       class AppComponent {
 | |
|         String name = 'Alice';
 | |
|       }
 | |
| 
 | |
|   // [PENDING: add line numbers once we can specify where they start]
 | |
| 
 | |
|   p.
 | |
|     The code you just added creates a component 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.
 | |
| 
 | |
| 
 | |
|   .l-sub-section
 | |
|     h3 Annotations
 | |
| 
 | |
|     p.
 | |
|       The <code>@Component</code> annotation defines
 | |
|       the HTML tag for the component by specifying the component's CSS selector.
 | |
| 
 | |
|     p.
 | |
|       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.
 | |
| 
 | |
|     pre.prettyprint
 | |
|       code.
 | |
|         @Component(
 | |
|           selector: 'my-app'
 | |
|         )
 | |
|         @Template(
 | |
|           inline: '<h1>Hello {{ name }}</h1>'
 | |
|         )
 | |
| 
 | |
|     // [PENDING: add line numbers once we can specify where they start]
 | |
| 
 | |
|     p.
 | |
|       The annotations above specify an HTML tag of <code><my-app></code>
 | |
|       and a template of <code ng-non-bindable><h1>Hello {{ name }}</h1></code>.
 | |
| 
 | |
| 
 | |
|   .l-sub-section
 | |
|     h3 The template and the component controller
 | |
| 
 | |
|     p.
 | |
|       A template has access to all the public properties and methods
 | |
|       of its component controller.
 | |
|       The template above binds to a <code>name</code> property through
 | |
|       the double-mustache syntax (<code ng-non-bindable>{{ ... }}</code>).
 | |
|     p.
 | |
|       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>.
 | |
| 
 | |
|     pre.prettyprint
 | |
|       code.
 | |
|         class AppComponent {
 | |
|           String name = 'Alice';
 | |
|         }
 | |
| 
 | |
|     // [PENDING: add line numbers once we can specify where they start]
 | |
| 
 | |
| 
 | |
| // STEP 4 - Bootstrap ##########################
 | |
| .l-main-section
 | |
|   h2#section-transpile 4. Bootstrap
 | |
| 
 | |
|   p.
 | |
|     Add the following code to the bottom of <code>web/main.dart</code>:
 | |
| 
 | |
|   pre.prettyprint
 | |
|     code.
 | |
|       main() {
 | |
|         // Temporarily needed.
 | |
|         reflector.reflectionCapabilities = new ReflectionCapabilities();
 | |
| 
 | |
|         bootstrap(AppComponent);
 | |
|       }
 | |
| 
 | |
|   // [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 component 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.
 | |
| 
 | |
| 
 | |
| // STEP 5 - Declare the HTML ##########################
 | |
| .l-main-section
 | |
| 
 | |
|   h2#section-angular-create-account 5. Declare the HTML
 | |
| 
 | |
|   p.
 | |
|     Create a file named <code>web/index.html</code> that contains
 | |
|     the following code,
 | |
|     which loads <code>main.dart</code> and instantiates the my-app component:
 | |
| 
 | |
|   pre.prettyprint.linenums
 | |
|     code.
 | |
|         <!doctype html>
 | |
|         <html>
 | |
|           <head>
 | |
|             <title>Angular 2 Quickstart</title>
 | |
|           </head>
 | |
|           <body>
 | |
|             <my-app></my-app>
 | |
| 
 | |
|             <script type="application/dart" src="main.dart"></script>
 | |
|             <script src="packages/browser/dart.js"></script>
 | |
|           </body>
 | |
|         </html>
 | |
| 
 | |
| // STEP 6 - Build and run ##########################
 | |
| .l-main-section
 | |
| 
 | |
|   h2#section-angular-run-app 6. Build and run your app
 | |
| 
 | |
|   p.
 | |
|     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>.
 | |
| 
 | |
|   // TODO: screenshot? embedded app?
 | |
| 
 | |
|   p.
 | |
|     Another option is to build and serve the app using <code>pub serve</code>,
 | |
|     and then 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 Angular's transformer becomes available.
 | |
| 
 | |
|   // [PENDING: Update when transformer is working!]
 | |
| 
 | |
| // WHAT'S NEXT... ##########################
 | |
| .l-main-section
 | |
|   h2#section-transpile Great job! Next step...
 | |
| 
 | |
|   p.
 | |
|     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.
 | |
| 
 | |
| 
 | |
|   // [PENDING: Perhaps point to dartlang.org.]
 |