跳至正文
首页 » 博客 » Simplest way to share data between two unrelated Components in Angular

Simplest way to share data between two unrelated Components in Angular

在Angular中,了解组件如何相互通信是至关重要的。如果您在一个组件内部使用另一个组件,则它们会创建一个父子关系。在这种情况下,父组件和子组件通过以下方式相互通信:

  • @ Input()
  • @ Output()
  • Temp Ref变量
  • ViewChild和ContentChild

您可以在此处详细了解 @ Input@ Output。在这篇博客文章中,您将了解如何使用Angular Service在彼此不相关的组件之间共享数据。

要使用示例来理解这一点,请创建一个服务。在服务中,创建一个名为count的变量。服务将在组件之间共享count变量的值。在创建count变量之前,让我们再次讨论需求。我们希望所有组件访问使用服务共享的数据的最后更新值。

为此,我们必须将count变量包装在RxJS主题中。确切地说,让我们使用行为主体

我们使用BehaviorSubject的原因如下:

  1. 来自服务的数据应该被多播。每个使用者组件都应该访问相同的数据副本。为此,行为主体被使用。
  2. 我们没有使用可观察量,因为它们本质上是单播的。订阅者将拥有自己的数据副本。
  3. BehaviorSubject存储当前值。因此,组件将始终读取BehaviorSubject中存储的数据的当前值。

将所有内容放在一起,共享简单数据的服务将看起来像下一个代码清单:

 “@ angular/core' 导入 {injected}; 'rxjs' 导入 { BehaviorSubject}; @ 可注射 ({providedIn: 'root'})AppService导出 {计数器 = 1;计数: 行为主体 < number >;构造函数 () { 这个 .count = BehaviorSubject(  .counter);} nextCount() {这个 .count.next(  .counter);}} 

现在,组件可以使用服务来访问共享数据。例如,在组件中,可以使用服务,如下所示:

导出Appchild2Component实现OnInit { count: 个数构造函数 (私有appsevice: AppService) {}ngOnInit() { 这个 .appsevice.count.subscribe(c => {这个 .计数 = c;});}nextCount() {这个 .appsevice.nextCount();}} 

我们正在订阅服务并读取局部变量中的count值。此外,还有一个增加计数的函数。在模板上,您可以显示和增加共享数据,如下一个代码清单所示:

< h2 > component2 = {Count }} 中的计数 </ h2 ><按钮(单击)='nextCount()'>来自component2的下一个计数</按钮>

通过这种方式,您可以在尽可能多的组件中使用服务,并且在任何地方共享来自服务的相同数据。供您参考,您可以在这里找到工作stackblitz:

https://stackblitz.com/github/debugmodedotnet/componnetcommunicationwithservice

在我看来,这是您可以在Angular中不相关的组件之间共享数据的最简单方法。我相信对于更复杂的场景,有更好的方法。如果您知道其他选择,请在下面的评论中提出一些建议。</p