終於完成資料庫的基本操作,列表、明細、修改、新增、刪除等功能,都一個一個的說明了。不過,資料庫的操作,還有最重要的查詢。關於這個功能,因為假資料,是用陣列物件來組成的,建議可以先取得所有資料後,再利用陣列物件的indexOf函式來查詢符合的資料。
而查詢出來的資料,在列表時,有可能也會做分頁的動作。所以,在最後的章節,就來討論一下,如何做分頁及查詢的功能。提到分頁,基本的功能,就是設計每頁有多少筆,將總筆數商除,來取得多少頁數,再一頁一頁的取回所屬的資料即可。再利用陣列物件的slice函式來取回所屬的資料。
依上述的說明,將員工資料列表的employee-list.component.ts修改成可查詢、可分頁的方式,程式碼如下:
// 列表資料物件
employeelists: Employeeinfo[];
// 查詢回傳物件
searchemployeeinfoinfos: Employeeinfo[];
// 分頁相關變數。
currentpage: number; // 現在頁數
currentpagesize: number; // 現在一頁筆數
total: number; // 總筆數
totalpages: number; // 總頁數
startpoint: number; // 開始筆數
endpoint: number; // 結束筆數
// 網頁輸入的欄位,接收值
searchname = ''; // 查詢關鍵字
上述所有可用到的變數宣告及注解,下述為getEmployees()函式的修改,所有的過程,都有注解,程式碼如下:
getEmployees(): void {
// 處理非同步機制。
this.employeeService.getEmployee()
.subscribe(searchemployeeinfoinfos => {
this.searchemployeeinfoinfos = searchemployeeinfoinfos;
// 搜尋條件判斷。
this.searchemployeeinfoinfos = this.filterItem(this.searchname);
// 分頁處理。
this.total = this.searchemployeeinfoinfos.length;
// 取得總頁數。
this.totalpages = Math.ceil(this.total / this.currentpagesize);
// 計算每頁的開始位置。
this.startpoint = (this.currentpage - 1) * this.currentpagesize;
// 計算每頁的結束位置。
if (this.startpoint + this.currentpagesize >= this.total) {
this.endpoint = this.total;
} else {
this.endpoint = this.startpoint + this.currentpagesize;
}
// 依開始、結束位置,取得此頁資料陣列。
this.employeelists = this.searchemployeeinfoinfos.slice(this.startpoint, this.endpoint);
});
}
// 過瀘條件。
filterItem(sname: string) {
return this.searchemployeeinfoinfos.filter(function(item) {
return item.name.indexOf(sname) !== -1;
});
}
最後,謝謝大家的支持。又完成這一屈的自我挑戰。也是我將學習Angular的心得,寫出來。接下來,要學習的就是Web API的開發,後續,學習到一個地步,再分享給大家。