2015-12-23 67 views
2

我正在將我的應用從Angular 1.X遷移到Angular 2.0,並且在遷移過程中/遷移過程之後,我對遷移解決方案有了一些想法。升級到Angular 2.0路由策略

我目前使用的路由器,與resolve爲了傳遞每個路由的數據。

經過一番閱讀,我碰到了this post。據我所知,新路由器中沒有resolve。我現在有兩個選擇:

  1. 繼續用我的當前UI路由器與我的混合ng1-2的應用程序(這可能嗎?),並通過路由器的resolve帶來每條路線的數據。它會起作用嗎?

  2. 更改路由並使用新的Component Router。這將使分步升級變得更加困難,因爲我必須將當前的Angular 1.X數據更改爲每個控制器/指令內+我將不會有Angular 2的@CanActivate等待數據解決。

哪個選項更好?還有其他選擇嗎?什麼會在這裏工作?

謝謝!

回答

0

我在工作中遇到了同樣的問題。我試過很多東西,但最後我使用的服務:

var data = { 
    'foo': 'bar' 
} 

export const StateData = { 
    data: data 
}; 

所以,現在在我的組件的頂部,我可以導入服務:

import { StateData } from '/services/StateService.ts'; 

然後我可以設置和獲取來自數據通過簡單地做服務:

StateData.data.foo = "something other than bar" 

現在,當你切換路由,可以構造函數()或afterViewInit()方法中檢索新更新的數據。

*另外一個使用的StateService是,你可以通過簡單地將下面的方法綁定所有組件之間數據的獎金(你可以命名爲任何):

getStateData(key) { 
    return StateData.data[key]; 
} 

您甚至可以從該方法DOM本身通過執行以下操作:

{{getStateData('foo')}} --> will print out the value "bar" 

現在,如果你在不同的組件的服務內改變foo的值,它會在DOM每當發生變化,改變服務,因爲getStateData()被調用只在頁面加載時加載一次。

我相信init和afterViewInit方法是爲什麼他們沒有添加解析到新路由器,或者他們還沒有發佈它的版本。

我希望這可以幫助你。我不認爲使用Angular 1.x + Angular 2.0會很容易,也不會很有趣lol

我最近在angular 2.0中重建了我的個人網站。代碼是公開的,所以你可以檢查出來。如果您查看contactCard.ts,contact-card.html和StateService.ts,您可以看到它在運行。這裏是回購:

https://github.com/YashYash/portfolio

+1

您的新遺蹟關鍵是可見的回購,不知道這是否應該是公開的:) – Boris