Angular2 返回時組件生命週期函數不被調用的解決方法

這兩天使用 Angular2 遇到的一個 @angular/router 的 bug:

症狀

@angular/router 版本 3.0.0-beta.2

  1. 使用 safari 瀏覽器,iOS 的都可以
  2. 打開 Angular2 官方的範例項目
  3. 點擊導航欄上的 Heroes 轉到 Heroes 列表頁面
  4. 後退回到 Dashboard 頁面,正常情況下應該有的四個 Heroes 沒有出現

桌面 safari 或 iOS 的都可以,使用 router 導航到一個新頁面,然後後退,原頁面 Component 的生命週期函數不會被調用,導致頁面表現不正常。

解決方法

已經有人修復了:fix(router): back button does not work in IE11 and Safari

但至本文成文還沒有更新到最新的 router npm 模塊裏。不急的話等 router 下個版本應該就修復了。臨時應急的話可以自行修改項目目錄下的node_modules/@angular/router/src/router.js 的 282 和 284 行即可

this.locationSubscription = this.location.subscribe(Zone.current.wrap(function (change) {
    return _this.scheduleNavigation(_this.urlSerializer.parse(change['url']), change['pop']);
}));
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章