2017-09-22 67 views
0

我試圖重新呈現一個角度爲2的html模板,迄今爲止研究後我發現我需要使用NgZone。所以我在做什麼,在我的主要組件中調用導航欄組件,它調用了userdetails組件。如何從其他組件重新呈現特定組件模板? Angular 2

在userdetails組件中顯示用戶的詳細信息,即名稱和東西。我有另一個組件改變了用戶的名字。所以當我更改名稱時,導航欄上的名稱(userdetails組件)不會更改。

因此,我嘗試在我的更改詳細信息組件中初始化一個usedetails組件,並調用一個方法,它初始化一個ngZone並調用.run()方法,以新名稱更新curretName ...和登錄控制檯。

因此,當我在http完成後立即更新名稱時,我在控制檯中收到新名稱,但在導航欄上名稱仍然相同。

到目前爲止唯一的解決方案是窗口重新加載......但這不是用戶友好的,因爲用戶不知道發生了什麼變化。

所以我跳過一些東西,但是什麼?

在此先感謝!

回答

1

我認爲試圖再次渲染你的組件並不是解決你的問題的好方法。您可以通過兩種不同的方式解決這個問題:

  • 使用的getter/setter服務,它返回一個Observable這樣你就可以subscribe它,並得到你希望的變化。所以你可以在你的user-details.component上訂閱,並使用setter和navigation.component設置一個新的值。你可以閱讀更多關於this article on Scotch.io by Jecelyn Yeen

  • 使用redux,所以,角度爲ngrx/storengrx/platform根據您的角度版本。使用redux,您可以從組件中將subscribe更改爲observable,發送新事件等等。實現你所需要的很容易。看看redux和我上面鏈接的演示。我強烈建議你在YouTube上觀看由Lukas Ruebbelke提供的this輝煌的演講,並觀看他的演示here

使用這兩種方法,雙向數據綁定將做的工作,所以,每次你要更新組件的變量時,你會看到你的觀點的最新數據。

+0

我看過這些指南中的一些,但我覺得我現在更加困惑。我試過這個ngDoCheck,但由於即時通訊在另一個組件,沒有任何作品從組件... 即使我直接改變curretName,與新的,沒有refssingh它像userdetails組件是死亡,它不再聽取任何東西,因爲我們目前不在其中...我只想要一些方法來刷新它或使其重新加載......沒有輸入window.location.reload():( – DavidsAmause

+2

我強烈建議你花費有一段時間想了解一般的rx和ngrx,看看我鏈接的視頻,這很簡單。 – AndreaM16