介绍
在上一篇文章中,我们讨论了如何使用 Angular 构建一个杂货列表管理器,并实现了基本的添加、编辑和删除功能。在本文中,我们将继续完善项目管理功能。我们将添加以下功能:
实现多个列表的管理
为项目添加截止日期
对项目排序
添加多个列表
我们的应用程序现在只支持一个杂货列表。我们将添加支持多个列表的功能。首先,在杂货列表顶部添加一个下拉菜单,允许用户切换列表。
// grocery.component.html
<select (change)="onChangeList($event.target.value)">
<option *ngFor="let list of lists" [value]="list">{{list}}</option>
</select>
<ul>
<li *ngFor="let item of items" [class.completed]="item.completed">
{{item.name}}<span [hidden]="!item.dueDate"> ({{item.dueDate | date:'MM/dd/yyyy'}})</span>
<button (click)="onEdit(item)">编辑</button>
<button (click)="onDelete(item)">删除</button>
</li>
</ul>
我们还需要在 Component 类中添加以下代码:
// grocery.component.ts
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-grocery',
templateUrl: './grocery.component.html',
styleUrls: ['./grocery.component.css']
})
export class GroceryComponent implements OnInit {
lists: string[] = ['默认清单', '购物清单', '任务清单'];
items: any[] = [];
...
onChangeList(list: string) {
// Load items from database based on selected list
}
}
现在,我们能够选择多个列表,但是还没有实现加载特定列表的功能。在下一节中,我们将添加该功能。
为项目添加截止日期
现在,我们的应用程序还不支持为项目添加截止日期。要实现此功能,我们将添加一个日期选择器,并将选择的日期保存在项目对象中。
// grocery.component.html
<input type="date" [(ngModel)]="selectedItem.dueDate">
<div *ngIf="selectedItem?.dueDate">
截止日期: {{selectedItem.dueDate | date:'MM/dd/yyyy'}}
</div>
在 Component 类中,我们还需要添加以下代码:
// grocery.component.ts
export class GroceryComponent implements OnInit {
...
selectedItem: any = {};
...
onEdit(item: any) {
this.selectedItem = item;
}
...
}
现在,当用户编辑项目时,日期选择器将显示,并且所选日期将保存到项目对象中。
对项目排序
我们的应用程序还不支持对项目进行排序。要实现此功能,我们将添加一个排序下拉菜单,并使用内置的 sort()
方法对项目进行排序。
// grocery.component.html
<select (change)="onSort($event.target.value)">
<option value="">排序方式</option>
<option value="nameAsc">名称升序</option>
<option value="nameDesc">名称降序</option>
<option value="dueAsc">日期升序</option>
<option value="dueDesc">日期降序</option>
</select>
在 Component 类中,我们需要添加以下代码:
// grocery.component.ts
export class GroceryComponent implements OnInit {
...
onSort(order: string) {
switch (order) {
case 'nameAsc':
this.items.sort((a, b) => a.name.localeCompare(b.name));
break;
case 'nameDesc':
this.items.sort((a, b) => b.name.localeCompare(a.name));
break;
case 'dueAsc':
this.items.sort((a, b) => (new Date(a.dueDate)).getTime() - (new Date(b.dueDate)).getTime());
break;
case 'dueDesc':
this.items.sort((a, b) => (new Date(b.dueDate)).getTime() - (new Date(a.dueDate)).getTime());
break;
default:
break;
}
}
}
现在,当用户选择排序方式时,项目将根据所选排序方式自动排序。
总结
在本文中,我们已经实现了许多杂货列表中管理项目的功能。我们添加了支持多个列表的功能,并为项目添加了截止日期和对项目排序的功能。使用 Angular,我们能够快速而轻松地创建强大的 Web 应用程序。