Angular2+学习笔记
开始
安装angular/clinpm install -g @angular/cli
创建完项目之后,会自动下载package.json的依赖项,最好使用cnpm下载
初始化项目ng new my-app
创建组件ng generate component my-new-component
项目结构
1 |
|
npm scripts指令
1 |
|
.angular.json 文件
1 | { |
基础知识
数据绑定
- 数据绑定
- 使用插值表达式的方法来使用
- 方法绑定
-使用()包着,例如(click)="方法名()"
双向数据绑定
- 要想使用双向数据绑定功能要先引入
- 在
app.module.ts
中引入,import {FormsModule } from "@angular/forms"
- 在
import
数组中添加FormsModule
通过指令[(ngModel)]="值"
条件渲染
通过指令
*ngIf="true"
来判断是否显示当有两个元素的渲染条件是一样的时候,我们往往会在外 边包一层元素,这样就可以不用写重复性的代码,但是会让元素多了个父层级,这样可能会对CSS有影响,
- 通过
来解决问题
- 通过
1 | <ng-template [ngIf]="true"> |
列表渲染
通过指令*ngFor="let item of 变量"
Class于Style绑定
通过指令[ngClass]="{key:value}"
通过指令[ngStyle]
事件
通过指令(事件)="方法名()"
,
如果向获取到event对象,则需要在绑定方法时,传入$event
,固定写法
事件修饰符
- .enter 当按下enter建时触发
用户输入
从一个模板引用变量中获得用户输入
还有另一种获取用户数据的方式:使用 Angular 的模板引用变量。 这些变量提供了从模块中直接访问元素的能力。 在标识符前加上井号 (#) 就能声明一个模板引用变量。下面的例子使用了局部模板变量,在一个超简单的模板中实现按键反馈功能。
1 | @Component({ |
生命周期
创建阶段
- ngAfterViewInit - 组件相应的视图初始化之后调用
- ngAfterContentInit - 在组件内容初始化之后调用
- ngDoCheck
- 自定义的方法,用于检测和处理值的改变
- 在组件初始化时会调用一次或者多次(我触发了两次)
- 当元素绑定的事件被触发时也会调用
1、ngOnChanges - 当数据绑定输入属性的值发生变化时调用
5、ngAfterContentChecked - 组件每次检查内容时调用
7、ngAfterViewChecked - 组件每次检查视图时调用
销毁阶段
- ngOnDestroy - 指令销毁前调用
组件
- 创建组件用命令行的方式,这样他会自动的生成一个模板,也会自动的添加到配置文件中去,
调用只需<app-组件名></app-组件名>即可
模块
路由
自己使用即可,在创建的模块中有自动引入路由模块
在app-routing.module.ts
文件中已经自动引入了import { Routes, RouterModule } from '@angular/router';
我们只需要配置路由即可
注意:配置路由不要添加/
配置路由
1 | import { SignIn } from "./sign-in/sign-in.component" |
- 路由出口
Angular中是<router-outlet></router-outlet>
Vue中是<router-view></router-view>
React中是<Router path="" component>
- 路由跳转
<a routerLink="/crisis-center" routerLinkActive="active">Crisis Center</a>
- 子路由
1 | { |
- 获取路由的参数Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
181. 首先导入路由模块
import { ActivatedRoute, Router } from '@angular/router';
2. 再构造函数中作为形参传递
constructor(
private activatedRoute: ActivatedRoute,
private router: Router
) {
}
3.1 通过snapshot拿到
console.log(this.activatedRoute.snapshot.params['id']);
3.2 通过subscribe
this.activatedRoute.params.subscribe(params => {
console.log(params.id);
})
案例
TodoMVC
question
- 怎么绑定checkbox的选中
- 使用双向数据绑定即可
- 双击元素拿到了子元素
- event.target: 拿到的是被点击的元素
- event.currentTarget: 拿到的是绑定事件的元素
- 给他绑定了编辑事件,怎么取消编辑,拿不到li元素
- 可以在元素上绑定id,再将id传给方法即可
- 例:
<li #list (click)="event(list)"></li>
- 同时绑定了keyup.enter和blur事件,当失去焦点时两个都会触发
- 这个要么通过全局点击事件来代替blur
- 要么就通过event事件里的event.sourceCapabilities来判断
- 当enter时这个值是undefined
- 当是blue时这个值是一个对象
通讯录
- 先创建模块
- 配置路由