Angular快速入门

人嘛,就是应该活到老学到老。新事物不断在出现,要是放弃学习,那么机会也会放弃你。这是一个简单的入门笔记,学习 Angular 就从这里开始吧。

核心概念

现在以 Angular2 为学习范本。

1、组件

组件包含单独的 js/html/css,可以拥有独立的功能。组件间通过输入输出接口进行交互。

组件的生命周期:

Constructor 构造器初始化,变量的初始赋值
onChanges 第一次触发数据变化钩子,接收父组件的传入数据
onInit 组件初始化
onChanges 运行期间触发数据变化钩子
onDestroy 组件销毁前

组件示例:

//import Component
@Component({//装饰器,赋予一个类更丰富的信息,即元数据
selector:'hello',//元数据
template:'<p>{{greeting}}</p>'//模板,内联
templateUrl:'path/to/hello.html'//模板,外联,内外只能2选1
})
export class HelloComponent{//组件类
private greeting :string;
constructor(){
this.greeting='Hello Angular2!'
}
}
//生成 html 页面:
<hello>
<p>Hello Angular2!<p/>
<hello/>

数据绑定

属性绑定:

<input [value]="myData"/>

事件绑定:

<input (keyup)="handle($event)"/>

双向绑定:

<input [(ngModel)]="myData"/>

2、指令:Direction 作用于组件上的模板
(1)属性指令:改变组件模板的外观或行为,如样式等
(2)结构指令:改变组件模板的 DOM 结构,如 ngIf 用来插入或者移除DOM 节点

指令示例:

//textColor="red"
template:"<p [style.color]='textColor'>{{greeting}}<p/>"
渲染出页面:
<p style="color:red">Hello Angular2!<p/>

指令也可以自定义。

//import ElementRef,Renderer
@Directive({
selector:'[highlight]',//选择器加方括号表示当做元素属性使用
})
export class HighlightDirective{
constructor(el: ElementRef,renderer: Renderer){
renderer.setElementStyle(el.nativeElement,'backgroundColor','yellow')
}
}
template:'<p highlight>{{greeting}}<p/>'

3、服务与依赖注入:服务是实现专一目的的逻辑单元,如日志服务。用在组件内部,作为组件功能的扩展。依赖注入是组件引入外部功能(服务)的一个机制。
服务示例:

export class LoggerService{
constructor(){}
debug(msg:string){
console.log(msg);
}
error(msg:string){
console.log(msg);
}
}

依赖注入:

//import LoggerService
@Component({
selector:'Hello',
template:'<p>{{greeting}}<p/>',
providers:[LoggerService]//依赖注入配置
})
export class HelloComponent1{
private greeting:string;
constructor(logger:LoggerService){//自动传入LoggerService实例
this.greeting='Hello Angular2';
logger.debug('构造函数执行完毕');
}
}

分层注入:在适当的位置重新创建一个新的实例,在对应的子组件注入服务即可。

4、模块:文件模块和应用模块

文件模块:

@angular/core 核心模块
@angular/common 通用模块
@angular/forms 表单模块
@angular/http 网络模块
...

文件模块的使用:

//网络模块
import {http} from '@angular/http'
//@Componentz 装饰器
import {Component} from '@angular/core'
//@Directive 装饰器
import {Directive} from '@angular/core'
import {ElementRef,Renderer} from '@angular/core'

应用模块:组件+指令+服务,按功能进行包装。跨模块不能直接使用,必须通过导入导出。

@NgModule({
declarations:[//包装组件或指令等
AppComponent,
SomeDirective
],
providers:[LoggerService],//依赖注入
imports:[OtherModule],//导入其他模块
bootstrap:[AppComponent],//设置根组件
exports:[SomeDirective]//导出组件或指令等
})
exports class AppModule {}