公司開發框架使用的是angular5,為了提高開發效率,將ng-zorro-antd庫引入項目。在開發過程中,發現該庫的月份選擇有問題(ng-zorro官網可復現),具體表現如下:

由上圖可以看出,月份選擇出現了兩個三月、兩個五月、兩個十二月。這個bug不僅出現在月份選擇,即便是日期選擇,也可以先選月份,依然會存在這個bug。
翻看了ng-zorro-antd的源碼,發現是生成月份列表的時候,月份計算錯誤。相關代碼如下圖:

開發者的想法應該是,通過setMonth()來依次獲取每個月份的時間。而問題恰恰出在這里。如果當前是Wed Jul 31 2019 18:00:00 GMT+0800 (中國標準時間),那么生成一月份的數據(setMonth(0))沒有問題,是Thu Jan 31 2019 18:00:00 GMT+0800 (中國標準時間),但是生成二月份的數據(setMonth(1))的時候回出問題,由于2月份只有28天,因此,代碼的執行結果是Sun Mar 03 2019 18:00:00 GMT+0800 (中國標準時間),實際上已經是三月份了。
也就是說,每個月的29、30、31號,月份選擇控件可以穩定的復現該bug。
在node_modules下找到ng-zorro-antd文件夾,打開其下的ems5文件夾下的antd.js文件,修改14387、14388及14423行相關的代碼。如下圖所示:


重啟項目可解決該bug。
在最新版本的ng-zorro-antd@8.1.2中,該bug已解決。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。