block includes include _util-fns - var _Install = 'Install' - var _prereq = 'Node.js and npm' - var _angular_browser_uri = '@angular/platform-browser-dynamic' - var _angular_core_uri = '@angular/core' - var _stepInit = 3 // Step # after NgModule step - var _quickstartSrcURL='https://github.com/angular/quickstart/blob/master/README.md' //- TS/Dart shared step counter - var step = _stepInit :marked This QuickStart guide demonstrates how to build and run a simple Angular 2 application in #{_Lang}. It also establishes a common development environment used throughout the code examples in these guides. .callout.is-helpful header Don't want #{_Lang}? p. Although you're getting started in #{_Lang}, you can also write Angular 2 applications in JavaScript and #{_docsFor == 'ts' ? 'Dart' : 'TypeScript'}. Use the language selector in the banner to switch development languages for this guide. .l-main-section h1 Overview aside.is-right :marked The live example link opens the finished application in Plunker so that you can interact with the code. You'll find live examples at the start of most sections. :marked The QuickStart application has the structure of a real-world Angular application and displays the simple message: figure.image-display img(src='/resources/images/devguide/quickstart/my-first-app.png' alt="Output of QuickStart app") :marked **Try it out**. Here's a link to a . You can also clone the entire QuickStart application from GitHub. h2 Build this application! :marked - [Prerequisite](#prereq): Install #{_prereq}. - [Step 1](#create-and-configure): Create and configure the project.
  • [Step 2](#ngmodule): Create your application.
  • - [Step !{step++}](#root-component): Create a component and add it to your application. - [Step !{step++}](#main): Start up your application. - [Step !{step++}](#index): Define the web page that hosts the application. - [Step !{step++}](#build-and-run): Build and run the application. - [Step !{step++}](#make-changes): Make some live changes. - [Wrap up and Next Steps](#wrap-up) - var step = _stepInit // reinitialize step counter for headers to come .l-main-section#prereq h1 Prerequisite: Install #{_prereq} block setup-tooling :marked If Node.js and npm aren't already on your machine, install them. Our examples require node **v5.x.x** or higher and npm **3.x.x** or higher. To check which version you are using, run `node -v` and `npm -v` in a terminal window. aside.is-right :marked To easily copy text from a code example, click the *Copy to Clipboard* icon (content_copy ) in the upper right corner of the example box. .l-main-section h1#create-and-configure Step 1: Create and configure the project - var _package_and_config_files = _docsFor == 'dart' ? 'pubspec.yaml' : 'configuration files' :marked In this step you will: * [Create the project folder](#create-the-project-folder) * [Create #{_package_and_config_files}](#add-config-files) * [#{_Install} packages](#install-packages) h2 Create the project folder :marked Using a terminal window, create a directory for the project, and change into this directory. - var _ = _docsFor == 'dart' ? '_' : '-'; code-example(language="sh"). mkdir angular2!{_}quickstart cd angular2!{_}quickstart h2#add-config-files Create #{_package_and_config_files} block package-and-config-files - var _tsconfigUri = 'guide/typescript-configuration.html#tsconfig' p Our typical Angular project needs several configuration files: ul li. #[b package.json] identifies npm package dependencies for the project. li. #[b tsconfig.json] defines how the TypeScript compiler generates JavaScript from the project's files. li. #[b typings.json] provides additional definition files for libraries that the TypeScript compiler doesn't natively recognize. li. #[b systemjs.config.js] provides information to a module loader about where to find application modules, and registers all the necessary packages. It also contains other packages that will be needed by later documentation examples. p. Create each of these files in your project directory. Populate them by pasting in text from the tabs in the example box below. a#config-files +makeTabs(` quickstart/ts/package.1.json, quickstart/ts/tsconfig.1.json, quickstart/ts/typings.1.json, quickstart/ts/systemjs.config.1.js `, '', ` package.json, tsconfig.json, typings.json, systemjs.config.js `) p. Learn more about these configuration files in the #[a(href="guide/npm-packages.html") Npm Package Configuration] guide and the #[a(href="#{_tsconfigUri}") TypeScript Configuration] guide. A detailed discussion of module loading is beyond the scope of this guide. .callout.is-helpful header SystemJS or Webpack? p. Although we use SystemJS for illustrative purposes here, it's only one option for loading modules. Use the module loader that you prefer. For Webpack and Angular, see Webpack: an Introduction. Or, learn more about SystemJS configuration in general here. h2#install-packages #{_Install} packages block install-packages :marked Using npm from the command line, install the packages listed in `package.json` with the command: code-example(language="sh"). npm install :marked Error messages—in red—might appear during the install, and you might see `npm WARN` messages. As long as there are no `npm ERR!` messages at the end, you can assume success. :marked You should now have the following structure: .filetree .file angular2-quickstart .children .file node_modules ... .file typings ... .file package.json .file systemjs.config.js .file tsconfig.json .file typings.json :marked If the `typings` folder doesn't show up after running `npm install`, you'll need to install it manually with the command: code-example(language="sh"). npm run typings install :marked You're now ready to write some code! +ifDocsFor('ts') .l-main-section h1#ngmodule Step 2: Create your application :marked You compose Angular applications into closely related blocks of functionality with [NgModules](guide/ngmodule.html). Angular itself is split into separate Angular Modules. This makes it possible for you to keep payload size small by only importing the parts of Angular that your application needs. Every Angular application has at least one module: the _root module_, named `AppModule` here. Create the file `app/app.module.ts` with the following content: +makeExample('app/app.module.1.ts')(format='.') :marked This is the entry point to your application. Since the QuickStart application is a web application that runs in a browser, your root module needs to import the [`BrowserModule`](../latest/api/platform-browser/index/BrowserModule-class.html) from `@angular/platform-browser` to the `imports` array. This is the smallest amount of Angular that is needed for a minimal application to run in the browser. The QuickStart application doesn't do anything else, so you don't need any other modules. In a real application, you'd likely import [`FormsModule`](../latest/api/forms/index/FormsModule-class .html) as well as [`RouterModule`](../latest/api/router/index/RouterModule-class.html) and [`HttpModule`](../latest/api/http/index/HttpModule-class.html). These are introduced in the [Tour of Heroes Tutorial](../tutorial/). .l-main-section h1#root-component Step !{step++}: Create a component and add it to your application :marked Every Angular application has at least one component: the _root component_, named `AppComponent` here. Components are the basic building blocks of Angular applications. A component controls a portion of the screen—a *view*—through its associated template **Create #{_an} #{_appDir} subfolder** off the project root directory: code-example. mkdir #{_appDir} a#app-component p. #[b Create the component file] #[code #[+adjExPath('app/app.component.ts')]] (in this newly created directory) with the following content: +makeExample('app/app.component.ts') :marked The QuickStart application has the same essential structure as any other Angular component: * **An import statement**. Importing gives your component access to Angular's core [`@Component` decorator function](../latest/api/core/index/Component-decorator .html). * **A @Component #{_decorator}** that associates *metadata* with the `AppComponent` component class: - a *selector* that specifies a simple CSS selector for an HTML element that represents the component - a *template* that tells Angular how to render the component's view. * **A component class** that controls the appearance and behavior of a view through its template. Here, you only have the root component, `AppComponent`. Since you don't need any application logic in the simple QuickStart example, it's empty. You *export* the `AppComponent` class so that you can *import* it into the application that you just created. Edit the file `app/app.module.ts` to import your new `AppComponent` and add it in the declarations and bootstrap fields in the `NgModule` decorator: +makeExample('app/app.module.ts', null, title='app/app.module.ts') .l-main-section h1#main Step !{step++}: Start up your application block create-main :marked Now you need to tell Angular to start up your application. Create the file `app/main.ts` with the following content: +makeExample('app/main.ts') - var _pBD_bootstrapModule = _docsFor == 'dart' ? _bootstrapModule : 'platformBrowserDynamic().bootstrapModule' :marked This code initializes the platform that your application runs in, then uses the platform to bootstrap your `!{_AppModuleVsAppComp}`. ### Why create separate *main.ts*, app module and app component files? App bootstrapping is a separate concern from creating a module or presenting a view. Testing the component is much easier if it doesn't also try to run the entire application. .callout.is-helpful header Bootstrapping is platform-specific :marked Because the QuickStart application runs directly in the browser, `main.ts` imports the `!{_platformBrowserDynamicVsBootStrap}` function from `#{_angular_browser_uri}`, not `#{_angular_core_uri}`. On a mobile device, you might load a !{_moduleVsComp} with [Apache Cordova](https://cordova.apache.org/) or [NativeScript](https://www.nativescript.org/), using a bootstrap function that's specific to that platform. .l-main-section h1#index Step !{step++}: Define the web page that hosts the application :marked In the *#{_indexHtmlDir}* folder, create an `index.html` file and paste the following lines into it: +makeExample('index.html') +ifDocsFor('ts') :marked The noteworthy sections here are: * JavaScript libraries: `core-js` polyfills for older browsers, the `zone.js` and `reflect-metadata` libraries needed by Angular, and the `SystemJS` library for module loading. * Configuration file for `SystemJS`, and a script where you import and run the `app` module which refers to the `main` file that you just wrote. * The [``](#my-app) tag in the `` which is *where your app lives!* :marked ## Add some style Styles aren't essential, but they're nice, and `index.html` assumes that you have a stylesheet called `styles.css`. Create a `styles.css` file in the *#{_indexHtmlDir}* folder, and start styling, perhaps with the minimal styles shown below. +makeExcerpt('styles.css (excerpt)', 'quickstart') .callout.is-helpful :marked For the full set of master styles used by the documentation samples, see [styles.css](https://github.com/angular/angular.io/blob/master/public/docs/_examples/styles.css). .l-main-section#build-and-run h1 Step !{step++}: Build and run the application block run-app :marked Open a terminal window and enter this command: code-example. npm start aside.is-right :marked [Read more](https://github.com/angular/quickstart/blob/master/README.md#npm-scripts) about other useful npm scripts included in this example's `package.json`. :marked That command runs the following two parallel node processes: * The TypeScript compiler in watch mode * A static server called _lite-server_ that loads `index.html` in a browser and refreshes the browser when application files change In a few moments, a browser tab should open and display the following: figure.image-display img(src='/resources/images/devguide/quickstart/my-first-app.png' alt="Output of QuickStart app") block build-app //- Nothing for ts. .l-main-section#make-changes h1 Step !{step++}: Make some live changes :marked Try changing the message in `app/app.component.ts` to "My SECOND Angular 2 App". block server-watching :marked The TypeScript compiler and `lite-server` will detect your change, recompile the TypeScript into JavaScript, refresh the browser, and display your revised message. Close the terminal window when you're done to terminate both the compiler and the server. .l-main-section h1#wrap-up Wrap up and next steps :marked The final project folder structure looks like this: block project-file-structure .filetree .file angular2-quickstart .children .file app .children .file app.component.ts .file app.module.ts .file main.ts .file node_modules ... .file typings ... .file index.html .file package.json .file styles.css .file systemjs.config.js .file tsconfig.json .file typings.json :marked To see the file contents, open the . .l-main-section :marked ## What next? This first application doesn't do much. It's basically "Hello, World" for Angular 2. You wrote a little Angular component, created a simple `index.html`, and launched with a static file server. +ifDocsFor('ts') :marked You also created the basic application setup that you'll re-use for other sections in this guide. From here, the changes you'll make in the `package.json` or `index.html` files are only minor updates to add libraries or some css stylesheets. You also won't need to revisit module loading again. :marked To take the next step and build a small application that demonstrates real features that you can build with Angular, carry on to the [Tour of Heroes tutorial](./tutorial)!