197 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			197 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
.l-main-section
 | 
						|
 | 
						|
  h2#section-install-or-plunker Install Angular
 | 
						|
  p There are four steps to create any Angular app:
 | 
						|
  ol
 | 
						|
    li Create an entry point HTML file where users will start
 | 
						|
    li Load the Angular library at the top of the file
 | 
						|
    li Make a root component for your application
 | 
						|
    li Bootstrap Angular
 | 
						|
 | 
						|
  p.
 | 
						|
    You can edit and test out your apps by serving local files with a web server. Follow the steps in the <a href="../quickstart.html">quickstart</a> to get Typescript setup.
 | 
						|
 | 
						|
  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>.)
 | 
						|
 | 
						|
  p For example:
 | 
						|
 | 
						|
  code-example.
 | 
						|
    # 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
 | 
						|
 | 
						|
.callout.is-helpful
 | 
						|
  header Typescript vs ES5
 | 
						|
  p.
 | 
						|
    Although we work through the examples in TypeScript, you can also use
 | 
						|
    regular ES5. Click the ES5 link in any code box to see the ES5 JavaScript
 | 
						|
    version. Note that in ES5, you'd want to name your files <code>.js</code> rather than
 | 
						|
    <code>.ts</code>.
 | 
						|
 | 
						|
 | 
						|
.l-main-section
 | 
						|
  h2#section-create-an-entry-point Create an entry point
 | 
						|
  p.
 | 
						|
    Create an <code>index.html</code> file and add the Angular library tags and a <code>main.ts</code> file where
 | 
						|
    you'll build your first component.
 | 
						|
 | 
						|
  p.
 | 
						|
    In the <code><body></code>, add an element called <code><my-app></code> that will be the root of your
 | 
						|
    application.
 | 
						|
 | 
						|
  p.
 | 
						|
    The TypeScript setup includes System.js, a third-party open-source library that adds ES6 module loading functionality to browsers. This step isn't needed for the ES5 version.
 | 
						|
 | 
						|
  code-tabs
 | 
						|
    code-pane(language="html" name="TypeScript" format="linenums").
 | 
						|
      <!DOCTYPE html>
 | 
						|
      <html>
 | 
						|
        <head>
 | 
						|
          <script src="https://github.jspm.io/jmcriffey/bower-traceur-runtime@0.0.87/traceur-runtime.js"></script>
 | 
						|
          <script src="https://jspm.io/system@0.16.js"></script>
 | 
						|
          <script src="https://code.angularjs.org/2.0.0-alpha.26/angular2.dev.js"></script>
 | 
						|
        </head>
 | 
						|
        <body>
 | 
						|
          <my-app></my-app>
 | 
						|
          <script>
 | 
						|
            System.import('main');
 | 
						|
          </script>
 | 
						|
        </body>
 | 
						|
      </html>
 | 
						|
 | 
						|
    code-pane(language="html" name="ES5" format="linenums").
 | 
						|
      <!DOCTYPE html>
 | 
						|
      <html>
 | 
						|
        <head>
 | 
						|
          <script src="https://code.angularjs.org/2.0.0-alpha.26/angular2.sfx.dev.js"></script>
 | 
						|
          <script src="main.js"></script>
 | 
						|
        </head>
 | 
						|
        <body>
 | 
						|
          <my-app></my-app>
 | 
						|
        </body>
 | 
						|
      </html>
 | 
						|
 | 
						|
.callout.is-helpful
 | 
						|
  header Don't use code.angularjs.org in a live app
 | 
						|
  p.
 | 
						|
    This example serves the Angular library from <a href="http://code.angularjs.org">code.angularjs.org</a>. This is
 | 
						|
    fine for examples, but you'd want to serve it yourself or use a CDN for real deployment.
 | 
						|
 | 
						|
.l-main-section
 | 
						|
  h2#section-set-up-the-starting-component Set up the starting component
 | 
						|
 | 
						|
  p.
 | 
						|
    In <code>main.ts</code>, create a class called <code>AppComponent</code>, configure it to bind to the
 | 
						|
    <code><my-app></code> element in <code>index.html</code>, and call Angular's <code>bootstrap()</code> to kick
 | 
						|
    it all off like this:
 | 
						|
 | 
						|
  code-tabs
 | 
						|
    code-pane(language="javascript" name="TypeScript" format="linenums").
 | 
						|
      import {Component, View, bootstrap} from 'angular2/angular2';
 | 
						|
 | 
						|
      @Component({
 | 
						|
        selector: 'my-app'
 | 
						|
      })
 | 
						|
      @View({
 | 
						|
        template: '<h1>My first Angular 2 App</h1>'
 | 
						|
      })
 | 
						|
      class AppComponent {
 | 
						|
      }
 | 
						|
 | 
						|
      bootstrap(AppComponent);
 | 
						|
    code-pane(language="javascript" name="ES5" format="linenums").
 | 
						|
        function AppComponent() {}
 | 
						|
 | 
						|
        AppComponent.annotations = [
 | 
						|
          new angular.ComponentAnnotation({
 | 
						|
            selector: 'my-app'
 | 
						|
          }),
 | 
						|
          new angular.ViewAnnotation({
 | 
						|
            template: '<h1>My first Angular 2 App</h1>'
 | 
						|
          })
 | 
						|
        ];
 | 
						|
 | 
						|
        document.addEventListener('DOMContentLoaded', function() {
 | 
						|
          angular.bootstrap(AppComponent);
 | 
						|
        });
 | 
						|
 | 
						|
 | 
						|
  .callout.is-helpful
 | 
						|
    header Annotations vs Decorators
 | 
						|
    p.
 | 
						|
      If you are transpiling using a tool that translates the <code>@</code> symbols to
 | 
						|
      annotations (for example Traceur), you will need to import the annotation versions of
 | 
						|
      Component and View. That can be easily achieved using
 | 
						|
      <code>import {ComponentAnnotation as Component, ViewAnnotation as View}</code>.
 | 
						|
 | 
						|
.l-main-section
 | 
						|
  h2#section-run-it Run it!
 | 
						|
 | 
						|
  p.
 | 
						|
    Open <code>index.html</code> through your web server and you should see:
 | 
						|
 | 
						|
  figure.image-display
 | 
						|
    img(src='/resources/images/examples/setup-example1.png' alt="Example of Todo App")
 | 
						|
 | 
						|
.l-main-section
 | 
						|
  h2#section-explanations Explanations
 | 
						|
 | 
						|
  p This basic Angular app contains the structure for any app you'll build.
 | 
						|
 | 
						|
  .l-sub-section
 | 
						|
    h3 It's all a tree
 | 
						|
    p.
 | 
						|
      You can think of Angular apps as a tree of components.  This root component we've been talking about acts as the top
 | 
						|
      level container for the rest of your application.  You've named this one <code>AppComponent</code>, but there's
 | 
						|
      nothing special about the name and you can use whatever makes sense to you.
 | 
						|
 | 
						|
    p.
 | 
						|
      The root component's job is to give a location in the <code>index.html</code> file where your application will
 | 
						|
      render through its element, in this case <code><my-app></code>.  There is also nothing special about this
 | 
						|
      element name; you can pick it as you like.
 | 
						|
 | 
						|
    p.
 | 
						|
      The root component loads the initial template for the application that will load other components to perform
 | 
						|
      whatever functions your application needs - menu bars, views, forms, etc.  We'll walk through examples of all of
 | 
						|
      these in the following pages.
 | 
						|
 | 
						|
  .l-sub-section
 | 
						|
    h3 @Component and @View annotations
 | 
						|
 | 
						|
    p.
 | 
						|
      A component annotation describes details about the component. An annotation can be identified by its at-sign (<code>@</code>).
 | 
						|
    p.
 | 
						|
      The <code>@Component</code> annotation defines the HTML tag for the component by specifying the component's CSS selector.
 | 
						|
    p.
 | 
						|
      The <code>@View</code> annotation defines the HTML that represents the component. The component you wrote uses an inline template, but you can also have an external template. To use an external template, specify a <code>templateUrl</code> property and give it the path to the HTML file.
 | 
						|
 | 
						|
  .l-sub-section
 | 
						|
    h3 import vs. window.angular
 | 
						|
    p.
 | 
						|
      The main difference between the ES5 and TypeScript versions is the loading of modules.
 | 
						|
 | 
						|
    strong TypeScript
 | 
						|
    p.
 | 
						|
      TypeScript supports ES6 module loading syntax. ES6 modules allow for modular loading of JavaScript code. Using ES6 modules you can cherry-pick only what you need for your app.
 | 
						|
 | 
						|
    strong ES5
 | 
						|
    p.
 | 
						|
      In ES5 the script file creates an angular property on the window of the browser. This property contains every piece of Angular core, whether you need it or not.
 | 
						|
 | 
						|
    code-tabs
 | 
						|
      code-pane(language="javascript" name="TypeScript" format="linenums" ).
 | 
						|
        import {Component, View, bootstrap} from 'angular2/angular2';
 | 
						|
        ...
 | 
						|
        // bootstrap is available for use because it was imported from angular core
 | 
						|
        bootstrap(AppComponent);
 | 
						|
      code-pane(language="javascript" name="ES5" format="linenums").
 | 
						|
        // window.angular is available because the script file attaches the angular property to the window
 | 
						|
        document.addEventListener('DOMContentLoaded', function() {
 | 
						|
          angular.bootstrap(AppComponent);
 | 
						|
        });
 |