我只是圍繞角2來看我的頭,並正在設計一個嚮導類型的應用程序。第1頁上的組件需要將數據傳送到其他頁面上的組件。考慮使用服務來保存在嚮導的下一個視圖/組件中注入的狀態/數據。整個事情應該鬆散耦合。我不認爲設計一個可觀察的模式是有用的,因爲在下一個頁面/視圖之一上的組件是不可見的。角2中有哪些新功能可以用來解決這個問題?如何保持角2的狀態?
回答
RxJS供電狀態管理應用在
我建議保持你的狀態集中使用例如Redux。然後,您將使用角的@Input()和@Output()將狀態傳播到組件,並從組件中分派狀態更改。
您將擁有一個訂閱狀態更改的頂級組件,並使用子組件@Inputs傳播這些組件。您的子組件會使用@Outputs()向頂層組件發出狀態更改請求,然後更新中央狀態。
通過這種方式,您的單個組件不必知道有關狀態如何存儲和更新的任何信息,它們僅提供功能並接受對其功能具有預期效果的輸入參數。
如果您有許多深度嵌套的組件,它們本身也使用@Input()和@Output()來提供功能,並且不直接與任何狀態存儲進行通信。
我自己使用這種方法,它使每個組件都非常精簡併且可重用,同時使它非常容易跟蹤您的狀態,並降低了跨組件同步狀態的複雜性。
您還應該看看ChangeDetectionStrategy和ChangeDetectorRef,因爲您可以使用此方法簡化組件更改檢測。您的所有子組件通常都可以使用所謂的OnPush檢查策略,這意味着它們的更改檢測將僅在其@Input()屬性發生更改時才運行。由於這是在這種情況下狀態將會改變的唯一方式,所以您可以通過角度來說明,否則就不會檢查更改。這也將有助於提高性能。
請注意,您可以只使用常規的angular2服務來保持狀態,但像Redux這樣的東西可以免費提供一些東西,例如提供的開發工具。如果你使用Redux,也可以看看Immutable.js,因爲重要的是不要直接使用Redux來改變狀態。通過終極版的Angular2啓發
謝謝,這是一個不錯的方法!如果是深度嵌套的子組件,那麼如何將狀態更改一直返回到保存視圖/應用程序的「主」狀態的頂級組件?你有一連串的輸出到頂端,還是有一個可以繞過這些鏈條的捷徑? – Janne
通常你會有一連串的輸出到最上面。如果它的嵌套方式過於舒適,可能需要將頂層組件的責任分解爲多個組件,這些組件正在操縱和訂閱中央集權狀態的不同區域。 – jgranstrom
我還沒有完全掌握最佳做法和/或角度「希望」我這樣做的方式。在大多數情況下,我一直依賴大量的輸入輸出,但最近我意識到我可以將一些屬性添加到服務中,並將其注入到我需要保存狀態的組件中。服務本質上是更「集中的存儲」 - 也許這就是Redux的做法,只是方法更復雜?或沒有?我的方法使用服務並依賴DI而不是大量的In/Out有任何問題。我發現注入服務更容易。 – JzInqXc9Dg
- 1. 如何在角度2中保存組件的狀態?
- 2. 如何保持Android活動的狀態
- 3. 如何保持CheckBoxList的更改狀態?
- 4. 如何在Android中保持我之前狀態的UI狀態?
- 5. OneLogin session_via_api_token如何「保持登錄狀態」
- 6. 如何使JOptionPane保持打開狀態
- 7. NSTimer:applicationDidEnterBackground:倒計時(如何保持狀態)
- 8. QWidget如何保持最佳狀態?
- 9. 配置保持活動狀態始終保持連接狀態
- 10. 保持以前的狀態
- 11. FTP傳送器保持保持狀態
- 12. 保存組件狀態[角]
- 13. JQuery Ajax Tabs +保持狀態
- 14. 裝飾:保持狀態
- 15. SimpleSAMLphp保持登錄狀態
- 16. 在Yesod中保持狀態
- 17. JQuery保持多個拖放狀態以保持項目的顏色與狀態
- 18. 角2應用的狀態管理
- 19. 如何使用Angular工廠在角度控制器之間保持狀態
- 20. Azure'網絡角色可以保持活動狀態多久?
- 21. 角度自定義異步驗證器保持待定狀態
- 22. 如何保持錨在相同的狀態爲:點擊後懸停狀態?
- 23. 如何保持的ImageButton在按下狀態並顯示按下狀態
- 24. 如何確保JDialog始終保持最佳狀態
- 25. 電報API:如何保持ApiState保存簽到狀態
- 26. 角2從URL保留狀態重定向後
- 27. 更改Form2上的複選框的狀態並保持狀態
- 28. 角2 - 如何保持與輸入的值
- 29. 如何在角度2中創建可選的根狀態?
- 30. 如何激活保持活動狀態,http://www.webpagetest.org表示保持活動狀態未激活
請添加一些代碼演示您嘗試完成的任務。 Angular提供'@Input()','@Output()'用於父子關係(某種程度上用於兄弟),以及用於所有其他服務。 –
舊的好的路由參數是從一條路徑傳遞到另一條路由的嗎? – smnbbrv
您可以使用帶有RxJS行爲副本的服務來確保尚未顯示的組件在初始化時獲取最新數據。 https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/subjects/behaviorsubject.md – Harry