如何从其他组件重新呈现特定组件模板? Angular 2

问题描述:

我试图重新呈现一个角度为2的html模板,迄今为止研究后我发现我需要使用NgZone。所以我在做什么,在我的主要组件中调用导航栏组件,它调用了userdetails组件。如何从其他组件重新呈现特定组件模板? Angular 2

在userdetails组件中显示用户的详细信息,即名称和东西。我有另一个组件改变了用户的名字。所以当我更改名称时,导航栏上的名称(userdetails组件)不会更改。

因此,我尝试在我的更改详细信息组件中初始化一个usedetails组件,并调用一个方法,它初始化一个ngZone并调用.run()方法,以新名称更新curretName ...和登录控制台。

因此,当我在http完成后立即更新名称时,我在控制台中收到新名称,但在导航栏上名称仍然相同。

到目前为止唯一的解决方案是窗口重新加载......但这不是用户友好的,因为用户不知道发生了什么变化。

所以我跳过一些东西,但是什么?

在此先感谢!

我认为试图再次渲染你的组件并不是解决你的问题的好方法。您可以通过两种不同的方式解决这个问题:

  • 使用的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