0

我正在尝试重新渲染一个 angular 2 html 模板,到目前为止,经过研究我发现我需要使用 NgZone。所以我在做什么,在我的主要组件中我调用导航栏组件,它调用 userdetails 组件。

在 userdetails 组件中显示用户详细信息,也就是名称和内容。我有另一个更改用户名称的组件。因此,当我在那里更改名称时,导航栏(userdetails 组件)上的名称不会更改。

所以我在我的更改详细信息组件中尝试这种方式初始化一个 usedetails 组件并从中调用一个方法,初始化一个 ngZone 并调用 .run() 方法,在该方法中我用新名称更新 curretName ...并登录安慰。

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

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

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

提前致谢 !

4

1 回答 1

1

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

  • 使用返回 an 的 Getter/Setter 服务,Observable以便您可以subscribe访问它并获得您想要的更改。因此,您将在您的 user-details.component 上订阅它,并使用带有您的 navigation.component 的设置器设置一个新值。您可以阅读Jecelyn Yeen 在 Scotch.io 上的这篇文章的更多信息。

  • 因此,根据您的角度版本,对角度ngrx/storengrx/platform使用 redux。使用 redux,您将能够subscribeobservable您的组件中访问,调度新事件等等。实现您所需要的非常容易。看看我在上面链接的redux和演示。我强烈建议您在 youtube 上观看Lukas Ruebbelke的精彩演讲,并在此处查看他的演示。

使用这两种方法,双向数据绑定将完成这项工作,因此,每次您要更新组件的变量时,您都会在视图中看到新数据。

于 2017-09-22T20:04:53.443 回答