一 Angular是什么?

Angular是由google开发维护的一个开发跨平台应用的框架,同时适应PC端和移动端。

两个大版本 1.5 和4.0:4.0完全重写,1.5之前的叫angularJS,4.0叫angular.

       二 Angular开发环境的搭建

Angular有两种环境搭建的方法,一种是使用angular提供的种子工程进行开发,另一种是使用Angular-cli的命令行进行开发。

种子工程的地址:https://github.com/angular/quickstart,clone到本地进行开发即可。

Angular-cli搭建本地开发环境:

打开命令行,检查自己本机是否已经安装node和npm,确保node在6.0以上,以及npm在3.0以上。安装成功后的效果如下图所示:

 

在自己本机全局安装angular-cli:命令如下:npm install -g @angular/cli,安装好之后使用ng -v检查是否安装成功。安装成功后的截图如下所示:

        安装完成后,使用ng命令创建一个新项目:ng new  projectName(你的项目名)
        进入到该项目目录:cd projectName 
        启动服务:ng serve 或者 npm start,这时angular的项目将新建成功,浏览器访问http://localhost:4200将会出现欢迎界面。
    三 Angular的项目结构

       新建项目成功后,项目结构如下图所示:
e2e文件夹:测试代码       
node_modules:项目的依赖库
src:我们主要写代码的地方,包括组件类app+环境配置environment

其他:项目的配置文件等

  四 Angular项目的启动顺序介绍

  ng serve命令后,编译执行。读main.ts->AppModule->index.html中写了app-root->找到对应组件,渲染静态页面模板。
  
  五 Angular的架构

模块:angular的应用是模块化的,称为angular模块或者ngModules,angular至少有一个模块,称为根模块,通常称为AppModules,在大型应用中可能也会包含很多小的模块, angular中有很多的库也是模块化的,比如httpModule,FormModule以及routerModule等等。

组件:组件负责屏幕上的一小块区域。比如网页中的header、aside、footer、search、form等都可以作为一个组件。我们在组件的应用类中定义一些逻辑来支持视图的显示。

模板我们通过组件的自带的模板来定义组件视图。模板以 HTML 形式存在,告诉 Angular 如何渲染组件。它看起来和html很像,有时候会添加

元数据元数据告诉 Angular 如何处理一个类,以AppComponent为例,去掉@Component装饰器,它就是一个普通的ES6类,我们添加了@Component装饰器类之后angular才知道要把这个类渲染成组件,@Component中传入的参数就叫做元数据。angular根据元数据来渲染该类。

数据绑定Angular 支持数据绑定,一种让模板的各部分与组件的各部分相互合作的机制。 我们往模板 HTML 中添加绑定标记,来告诉 Angular 如何把二者联系起来。

在jQuery时代,我们要手动的去获取dom中的数据或者值,并且手动的将后台传回的json数据append到html视图中,手动的去写这些逻辑太繁杂冗长,并且效率底下,容易出错,所以angular框架支持数据绑定。即之前需要手动写的逻辑框架帮我们实现了。

declarations - 声明本模块中拥有的视图类。Angular 有三种视图类:组件指令管道
exports - declarations 的子集,可用于其它模块的组件模板
imports - 模块声明的组件模板需要的类所在的其它模块。
providers - 服务的创建者,并加入到全局服务列表中,可用于应用任何部分。
bootstrap - 指定应用的主视图(称为根组件),它是所有其它视图的宿主。只有根模块才能设置bootstrap属性。

数据绑定的四种方式:   

      
指令Angular 模板是动态的。当 Angular 渲染它们时,它会根据指令提供的操作对 DOM 进行转换。
组件是一个带模板的指令;@Component装饰器实际上就是一个@Directive装饰器,只是扩展了一些面向模板的特(templateUrls,styleUrls)。
// angular/packages/core/src/metadata/directives.ts
export interface Directive {
  selector?: string; // 用于定义组件在HTML代码中匹配的标签
  inputs?: string[]; // 指令的输入属性
  outputs?: string[]; // 指令的输出属性
  host?: {[key: string]: string}; // 绑定宿主的属性、事件等
  providers?: Provider[]; // 设置指令及其子指令可以用的服务
  exportAs?: string; // 导出指令,使得可以在模板中调用
  queries?: {[key: string]: any}; // 设置指令的查询条件
}

export interface Component extends Directive {
  changeDetection?: ChangeDetectionStrategy; // 指定组件使用的变化检测策略
  viewProviders?: Provider[]; // 设置组件及其子组件(不含ContentChildren)可以用的服务
  moduleId?: string; // 包含该组件模块的 id,它被用于解析 模版和样式的相对路径
  templateUrl?: string; // 为组件指定一个外部模板的URL地址
  template?: string; // 为组件指定一个内联的模板
  styleUrls?: string[]; // 为组件指定一系列用于该组件的样式表文件
  styles?: string[]; // 为组件指定内联样式
  animations?: any[]; // 设置组件相关动画
  encapsulation?: ViewEncapsulation; // 设置组件视图包装选项
  interpolation?: [string, string]; // 设置默认的插值运算符,默认是"{{"和"}}"
  entryComponents?: Array<Type<any>|any[]>; // 设置需要被提前编译的组件
}
属性指令:[(ngModel)] [ngSwitch]等 
结构指令:*ngIf   *ngFor *ngSwitchCase *ngSwitchDefault
自定义指令:进阶教程中讲~
服务:服务在anguar中通常写一些请求后台的逻辑或者处理数据的业务逻辑,它具有专注的,特定的用途。
创建一个服务:ng g service serviceName
依赖注入
什么是依赖注入? -------- car.ts
angular总得依赖注入是怎么实现的?
路由:以头部的navbar为例,我们有几个导航,点击可以切换页面的内容,具体的实现步骤如下:
(1)在index.html页面引入<base href="/">  index.html<head>标签下先添加一个<base>元素,来告诉路由器该如何合成导航用的URL。
(2)在appModule(不一定在根目录)中定义路由的key-value
(3)在需要路由的超链接地方添加routerLink,也有直接在url中请求的 ,事件中请求
(4)在路由的页面需要的显示的地方添加占位符<router-outlet></router-outlet>
扩展:辅助路由,路由守卫,子路由
表单:模板表单  响应式表单


本文转载:CSDN博客