创建组件及模板
一、创建组件
- 创建组件
ng g component components/header
- 使用组件
<app-home></app-home>
二、数据绑定
/*
声明属性的几种方式:
public 共有 *(默认) 可以在这个类里面使用,也可以在类外面使用
protected 保护类型 它只有在当前类和它的子类里面可以访问
private 私有 只有在当前类才可以访问这个属性
*/
// *定义数据
public title = "我是新闻组件";
msg = "我是一个新闻组件的msg";
private username: string = '张三';
public student: any = '我是一个学生的属性(数据)' // !推荐
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
1、数据文本绑定
- angular中使用{{}}绑定业务逻辑里面定义的数据
<h2>{{title}}</h2>
1
- angular模板里面允许做简单的计算
<p>1+2={{1+2}}</p>
1
- 模板里面绑定html
public content:any = '<h2>我是一个html标签,用[innerHtml]解析</h2>';
1
<p [innerHtml]='content'></p>
1
2、绑定属性
public student: any = '我是一个学生的属性(数据)'
1
<p [title]="student">张三</p>
1
3、数据循环
//定义数组
public arr: any[] = ['111', '222', '333'];
public list: Array < string > = ['我是数组1', '我是数组2'];
public userlist: any[] = [{
username: '张三',
age: 20
}, {
username: '李四',
age: 20
}, {
username: '王五',
age: 20
}]
public cars: any[] = [{
cate: '宝马',
list: [{
title: '宝马x1',
price: '30万'
}, {
title: '宝马x2',
price: '40万'
}, {
title: '宝马x3',
price: '50万'
}]
},
{
cate: '奥迪',
list: [{
title: '奥迪q1',
price: '50万'
}, {
title: '奥迪q2',
price: '60万'
}, {
title: '奥迪q3',
price: '70万'
}]
}
]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
- *ngFor 普通循环
<ul>
<li *ngFor="let item of arr">{{item}}</li>
</ul>
1
2
3
2
3
- 循环的时候设置key
<ol>
<li *ngFor="let item of list;let key=index">
{{item}}---{{key}}
</li>
</ol>
1
2
3
4
5
2
3
4
5
- template循环数据
<ul>
<li template="ngFor let item of list">
{{item}}
</li>
</ul>
1
2
3
4
5
2
3
4
5
- 循环数组对象
<ul>
<li *ngFor="let item of userlist">
<span>{{item.username}}</span>--<span>{{item.age}}</span>
</li>
</ul>
1
2
3
4
5
2
3
4
5
- 嵌套循环
<ul>
<li *ngFor="let item of cars">
<h4>{{item.cate}}</h4>
<ol>
<li *ngFor="let car of item.list">
{{car.title}}--{{car.price}}
</li>
</ol>
</li>
</ul>
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
4、条件判断
ng里面的条件判断只有if,没有else
public flag:boolean=true;
public list:any[]=[{
'title':'我是新闻1'
},{
'title':'我是新闻2'
},{
'title':'我是新闻3'
}]
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<div *ngIf="flag">
<img src="assets/images/favicon.png" alt="">
</div>
<div *ngIf="!flag">
<img [src]="picUrl" alt="">
</div>
1
2
3
4
5
6
2
3
4
5
6
<ul>
<li *ngFor="let item of list;let key=index">
<span *ngIf="key==1" class="red">{{item.title}}---{{key}}</span>
<span *ngIf="key!=1">{{item.title}}---{{key}}</span>
</li>
</ul>
1
2
3
4
5
6
2
3
4
5
6
5、*ngSwitch
public orderStatus:number=1; // 1.表示已经支付 2.表示确认订单 3.已经发货
1
<span [ngSwitch]="orderStatus">
<p *ngSwitchCase="1">
表示已经支付
</p>
<p *ngSwitchCase="2">
表示确认订单
</p>
<p *ngSwitchCase="3">
已经发货
</p>
<p *ngSwitchDefault>
无效订单
</p>
</span>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
5、[ngClass]、[ngStyle]
[ngClass]
<p class="red">ngClass提示(尽量不要用dom改变class)</p>
<p [ngClass]="{'orange':!flag,'blue':flag}">ngClass提示</p>
<em>循环数组,让数组的第一个元素的样式为red</em>
<li *ngFor="let item of list;let key=index"
[ngClass]="{'red': key==1,'orange':key==2}"
>{{key}}--{{item.title}}</li>
1
2
3
4
5
6
2
3
4
5
6
[ngStyle]
<p [ngStyle]="{'color': 'blue'}">我是一个p标签</p>
<p [ngStyle]="{'color': attr}">我是一个p标签</p>
1
2
2
6、管道
<p>{{tody | date:'yyyy-MM-dd HH:mm:ss'}}</p>
1
其他管道: http://bbs.itying.com/topic/5bf519657e9f5911d41f2a34
7、执行事件
getDate() {
alert(this.flag)
}
runEvent(e) {
// console.log(e)
//!定义变量要指定类型
var dom:any = e.target;
dom.style.color="red"
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<button (click)="getDate()">执行事件获取数据</button>
<button (click)="runEvent($event)">执行方法获取事件对象</button>
1
2
2
键盘事件
keyDown(e) {
console.log('keydown事件')
if(e.keyCode===13) {
console.log('按了一下回车')
}else {
console.log(e.target.value)
}
}
keyUp(e) {
console.log('keyup事件')
if(e.keyCode===13) {
console.log(e.target.value)
// console.log('按了一下回车')
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
keyDown
<input type="text" (keydown)="keyDown($event)">
keyUp
<input type="text" (keyup)="keyUp($event)">
1
2
3
4
2
3
4
8、双向数据绑定
注意引入:FormsModule
import { FormsModule } from '@angular/forms';
@NgModule({
declarations: [ //配置当前项目运行的组件
AppComponent, NewsComponent, HeaderComponent, HomeComponent, FormComponent, SearchComponent, TodoListComponent
],
imports: [ //配置当前模块运行依赖的其他模块
BrowserModule,
AppRoutingModule,
FormsModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<input type="text" [(ngModel)]="keywords" />
{{keywords}}
1
2
2