因為產品雛形第一版的開發時程短促,以及產品功能需要一個表格能夠搜尋各種資料欄位,經過一番找尋和初步試用後,認為應該能導入在產品裡面。本文是一些使用的心得和指南。本次使用 ng2-smart-table 的版本是 1.4.0,它不是此時的最新版本,因為要配合產品的 angular 框架版本 6,此版本是最後能適用在 angular 6 的版本號,之後的號碼是適用 angular 7 以上。
心得如下:
不要輕易使用 ng2-smart-table 的 ServerDataSource,因為能夠順利使用它的前提是:
如果你要增加或修改 ServerDataSource 的功能,例如:後端系統的回應內容欄位不必要相同於 ng2-smart-table 的 settings 變數底下的欄位名稱,請記得一定要修改 getElement() 的實作內容,因為 getElements() 是發動向後端系統發出查詢資料要求的方法入口處,並且在這方法中的最後,會將回應內容的 datakey 對應的資料內容,存進 ServerDataSource 資料結構中,給 ServerDataSource 的其他方法使用。請看原始碼的 server.data-source.js 檔案的第 37 行,我建議做法是去繼承 ServerDataSource ,並且先將 \_this.data = \_this.extractDataFromResponse(res);
的 \_this.extractDataFromResponse(res);
的回應先暫時存在其他變數,並且去做你想要的欄位名稱轉換,接著才存入轉換欄位名稱後的資料內容存在 \_this.data
並且如原始碼繼續回傳 \_this.data
。
_this.data = _this.extractDataFromResponse(res); // origin
//
//
_tmp = _this.extractDataFromResponse(res); // modified
// 自定義的欄位名稱轉換 to result
_this.data = result;
ServerDataSource 、LocalDataSource 和 DataSource 的關係是,ServerDataSource 繼承於 LocalDataSource, LocalDataSource 又繼承於 DataSource。
如果想用 LocalDataSource 達成相同於 ServerDataSource 的換頁時去查後端系統資料,請做到以下內容:
參考連結: