Angular 2构建项目心得

(一)angular-cli

Angular 提供了一个命令行工具angular-cli,它能让用户通过命令行创建和管理项目,用它可以自动创建执行任务,添加新的控制器.......

要想安装angular-cli,你首先得运行下列命令:

$npm install -g [email protected]

打开终端窗口,运行ng new angualr2HelloWorld(创建项目)

创建成功后,在你的项目文件夹下会出现一堆文件,我们所在意的也就是src,以.spec.ts结尾的都是跟测试有关的文件,.html是组建的view,.css是组建的样式代码,.component.ts是组件的核心ts代码。app.module.ts则是整个项目的根组件。也可以说是项目的入口。

创建组件的命令为:ng g c 组件名

启动应用(项目)命令为:ng serve

到此hello-world小demo已经创建成功,并且可以运行起来了。

(二)TypeScript和RxJS

angular2是依赖于ts编程的,而ts又是基于ES6的,JS是ES5,那么ES6是JS的更先进版,RxJS嘛,就比较新颖,它是函数响应式编程.RxJS是一个通过使用可观察序列来构建异步和基于事件的程序的库。它提供了一个核心类型:Observable,在angular2里面大量运用了RxJS,所以我建议在学习angular2之前最好先学习一下RxJS和ES6。

(三)运用angular2的最基础只是来搭建demo

此demo结合了路由嵌套,表单,http服务,自定义指令。

1.创建项目angular2DemoAll:

   ng new angular2DemoAll

2.创建组件***:

ng g c ***

此时demo目录结构为:

Angular 2构建项目心得_第1张图片
demo目录结构

期重app组件为根组件,login,main为根组件下的直接子组件,其他组件为main子组件(路由嵌套情况与此相同)。

3.导入第三方依赖

项目我仍延用了angular1项目中类库jQuery和UI库bootsrap,本来打算再研究一下semantic-ui但太耗时了,就没来得及学习,首先要将jQuery和bootstrap包下载好

npm install --save-dev jQuery

npm install --save-dev bootsrap

然后打开你的项目目录,在node_modules文件夹下面找到angular-cli.json文件,然后将jQuery和UI库bootsrap添加到相应的位置。如下图:

Angular 2构建项目心得_第2张图片
angular-cli.json部分截图

最后在你需要引用$的组件里导入jquery.即可

组件里导入$

我当时还百度了一种做法,是直接声明:declare var $:any,但我试了不能用。具体因为什么我还没研究出来。

4.app组件

Angular 2构建项目心得_第3张图片
app.module.ts

import {

     routes as childRoutes,

     MainComponent,

     MainComponentModule

} from './main/main.component';

这段代码作用是引入了main模块,main组件以及子路由,为什么这里出现main模块呢,因为main组件的子组件太多了,为了条理就加了module,Angular 是模块化 (1)Modules 导出 classes, function, values ,(2) 以便在其他模块导入使用.angular应用由模块组成,(3)每个模块都做此模块相关的事情。

const routes:Routes = [

      {path:'',redirectTo:'login',pathMatch:'full'},          //redictTo指路由重定向

     {path:'main',component:MainComponent,children: childRoutes},

      {path:'login',component:LoginComponent},

]

这段代码是在描述路由配置,然后由RouterModule.forRoot(routes)来为程序提供使用路由的依赖,children属性值即为相应的子路由。

下图即为view视图,router-outlet 为占位符,就相当于AngularJS里的ui-view.

app.component.html

5.main组件

我把MainComponentModule也写在了main.component.ts里


Angular 2构建项目心得_第4张图片
main.component.ts
Angular 2构建项目心得_第5张图片
main.component.ts

export const routes:Routes = [

      {path:'',redirectTo:'home',pathMatch:'full'},

     {path:'home',component:HomeComponent},

     {path:'hospital',component:HospitalComponent},

      {path:'role',component:RoleComponent},

      {path:'people',component:PeopleComponent},

];

这段代码定义的main子路由,和app.module里定义方法一样。

this.router.navigate(['./',id],{relativeTo:this.route});这句代码是手动告诉路由器导航到指定路由。

下面说一下引入的各个模块的作用:

ActivatedRoute使用路由参数,RouterModule和Routes只要只用angular2路由器就得引入,Router则是为了通过Router实例来手动控制路由跳转。

FormsModule,ReactiveFormsModule为表单导入,前者提供模板驱动指令ngModel和NgForm,后者提供formControl和ngFormGroup指令

UiNavDirective为我的自定义指令。

6.nav组件

Angular 2构建项目心得_第6张图片
nav.component.html

[routerLink]相当于ui-sref,又因为是嵌套路由的子路由所以['./hospital']路由前面得加“./”。

Angular 2构建项目心得_第7张图片
nav.directive.ts

var elem = $(el.nativeElement)这步是将我们能取到的指令所在元素转化成我们熟知的jquery元素,然后再进行运算。

7.people组件

Angular 2构建项目心得_第8张图片
peopleSvc.ts

@Injectable()是声明此服务可以被组件引用。Observable是RxJS里面的可观察对象,RxJS存在理念就是用可观察序列将异步事件以同步的形式展现出来。其中可观察序列就是基于Observable的。this.http.get()是angular2的get通信方式,map()也是RxJS里的流方法,没什么深层含义,只是让他的function参数异步执行,并以流的形式将结果返回。res.json()则是将得到的结果转化成接口上写的形式,因为angular2的get通信将返回结果类型改变了,必须通过res.json()将其转换回来。

Angular 2构建项目心得_第9张图片
people.component.ts

在这里我是用了FormBuilder来构建表单,他比ngForm和ngControl隐式的构建表单更加灵活,里面的serarchResult类来存储查找的结果。

this.findForm = fb.group({……});是用FormBuilder的实例化对象fb的group方法创建新的FromGroup。然后在视图通过指令[formGroup]="findForm"使用findForm。最后将FormControl绑定到对应的input框,如:[formControl]="findForm.controls['userName']"。

Angular 2构建项目心得_第10张图片
people.component.html

8.组件之间的传值

我的demo里面的header组件需要用login组件里用户登陆后的返回值,我用了login服务作为中间键进行通信如下。

import {Injectable} from '@angular/core';

@Injectable()

export class login{

     data:Object;

}

login组件赋值,大家注意这里的post请求方式。

Angular 2构建项目心得_第11张图片
login.component.ts

然后header组件直接用就可以

Angular 2构建项目心得_第12张图片
header.component.ts


注意:我这里使用的都是自己的接口,大家参考时请用自己的接口替换,另外有很多文件我截图不完整,不过主要代码都在这里!此项目我没整理目录结构,如有需要,可以自己整理一下!

你可能感兴趣的:(Angular 2构建项目心得)