译者注:仅是官方文档的翻译.5分钟教程,5分钟入门,过易,本不想译,久未译,遂译.
我们将基于TypeScript来构建一个超级简单的Anglarjs2应用,同时为后续的APP应用开发,搭建好Angularjs2的开发环境.
在线示例
开始构建APP!
前提: 安装 Node.js
步骤1: 创建和配置工程
- (a)创造工程文件夹
- (b)增加一个包定义并配置文件
- (c)安装包
(a) 创建文件
1 | mkdir angular2-quickstart |
(b) 增加包定义和配置文件
package.jsonNPM的包配置文件, 列举了QuickStart依赖的包并定义了一些有用的脚本.tsconfig.jsonTypeScript的编译器配置文件typings.jsonTypeScript标示定义文件systemjs.config.jsSystemJS配置文件
package.json:
1 | { |
tsconfig.json:
1 | { |
typings.json:
1 | { |
systemjs.config.js:
1 | /** |
(c) 安装依赖包
使用npm安装package.json列出的依赖包.
npm install
如果
typings文件夹没有在npm install后显示,则需手动安装.npm run typings install
步骤2:第一个Aungular组件
在工程跟目录下创建一个子文件夹APP
mkdir app
增加一个组件文件app/app.component.ts 内容如下:
1 | import { Component } from '@angular/core'; |
AppComponent是应用的根组件.
每一个Angular应用至少有一个根组件,通常都命名为AppComponent,组件是Angular应用最基础的构建模块.组件通过其关联的模板控制着视图的展示.
本快速入门教程里的示例虽然只是一个超级简单的组件,但已经包含了每一个组件的基本结构要素.
import引用想要的模块.@Component装饰器告诉Angular这个组件的模板以及如何构建组件- 组件类通过模板来控制视图的展示和行为
Import
Angular的应用都是模块化的,他们由许多不同作用的文件组成.Angular本身就是是一个包含构建应用所需功能的模块库.
当我们需要某个模块或者库的时候,就import它.
示例中我们从Angular 2核心模块引入Component,这样就可以使用@Component装饰器了.
import { Component } from '@angular/core';
@Component decorator
Component是一个注释器函数,应用这类元数据对象函数需要在前面加个@符号.@Component是一个装饰器:
1 | @Component({ |
这个元数据对象有两个属性,selector和template.
selector声明了一个简单的CSS选择器用来表示代表组件的HTML元素.这个组件的HTML元素名为
my-app,Angular创建AppComponent实例并展示到承载这个组件的HTML的每一个my-app元素里template声明组件相关的模板,决定了Angular如何渲染组件.
组件类
文件的最后是一个AppComponent类.
export class AppComponent { }
由于本入门示例中不存在需要做的功能,目前AppComponent类是空的,以后我们想构建应用的时候,需要扩充类的特性和应用逻辑.
步骤3:增加main.ts
现在我们需要告诉Angular要加载根组件了,创建app/main.ts,内容如下:
1 | import { bootstrap } from '@angular/platform-browser-dynamic'; |
要启动应用,我们引入了两样东西:
- Angular的浏览器
bootstrap功能 - 应用的根组件
AppComponent
然后调用bootstrap(AppComponent),Bootstrapping是平台的一个特性.
注意到我们从@angular/platform-browser-dynamic而不是从@angular/core引入bootstrap功能.
Bootstrapping不属于核心库,这是因为可能会有多种方式启动Angular应用(没错,移动端/桌面/web端等等).当然,大部分的应用都是从浏览器库调用bootstrap方法的.但也有可能从不同的环境里加载组件,比如从Apache Cordova或者NativeScript加载,并运行在移动设备上.我们也有可能希望从服务器渲染第一个页面来改进性能或者加强SEO.这就需要有不同种类的bootstrap.
__为什么要分离main.ts和app组件文件
这只是一个简单的入门示例,现在main.ts和app组件文件都很小,我们确实可以灵活的合并或者拆分它们.
但我们想阐述一个更合理的Angular应用架构.App引导程序在不同的环境里多种多样,模块化分离文件,可以让测试变的更容易些,可以对某个组件进行单元测试,而不需要启动整个应用.
步骤4:增加index.html
在工程根目录里创建一个index.html:
1 | <html> |
这个index.html文件定义了承载这个应用的web页.HTML里的关键部分有:
- JavaScript库
- SystemJS的配置文件,一个导入app模块引用
main文件的脚本 - 在里的
标签,这是我们这个应用渲染位置.
库
我们加载以下脚本:
1 | <!-- Polyfill(s) for older browsers --> |
首先是core-js,它是一个ES2015(ES6)的shim,这个猴子补丁替换全局上下文(window)的ES6功能要素.接着是Angular2,zone.js,reflect-metadata的plyfills,这样这些功能就可以兼容老的浏览器了.最后是用于模块加载的库SystemJS.
SystemJS
入门教程使用SystemJS加载应用和库模块.之前我们已经将systemjs.config.js文件加入到了工程根目录了.基本上可以用webpack替换,不过SystemJS已经是个好选择了,最终选择权这个取决于你.
所有的模块加载都需要有配置,所有的加载配置都会随着结构增加或者考虑性能等而变的复杂.我们建议在你精通加载器的配置,SystemJS配置教程.
有了这些意识后,我们看看systemjs.config.js做了些什么?首先,我们创建一个map告诉SystemJS去哪里查找需要引入的模块.然后,将所有的包注册到SystemJS,包括:工程依赖包和应用包,app包.app包告诉SystemJS如何从app/文件目录里请求一个模块.
本示例使用TypeScript导入:
1 | import { AppComponent } from './app.component'; |
注意模块名不需要文件扩展名,SystemJS根据配置文件设置文件的默认扩展名为js.
System.import告诉SystemJS导入main文件;main是Aangular应用启动入口,我们可以抓取并记录启动时候的错误信息。
所有其他的模块都由import导入.
Angular调用main.ts里的bootstrap函数,它读取AppComponent的元数据,找到my-app选择器,定位my-app元素标签,并将组件转染到这些标签里.
增加样式
样式并不是必须的但样式会让应用更加美观,在index.html里假设有个层级样式styles.css。
创建一个styles.css文件在工程根目录,内容如下:
1 | h1 { |
步骤5:构建和运行APP!
打开一个终端窗口,敲入如下命令:npm start
这个命令执行了两条node进程:
- 及时监控进行TypeScript编
- lite-server静态服务器加载index.html到浏览器,当应用文件有修改时实时刷新浏览器
浏览器上就会打开并显示:
wrap up
我们最终的工程文件结构如下:
1 | --angular2-quickstart |
下一步?
我们第一个应用没有太多的功能,只是最基础的angular2的”Hello, World”应用。
我们写了一个简单的angular组件,构建了一个简单的index.html,并通过一个静态文件服务器加载它.这些就是这个 “Hello, World” app的全部了
