如何在Angular的两个模块之间共享全局计数变量?

时间:2018-11-21 13:59:40

标签: angular redux module

在我的应用程序中,我有不同的延迟加载模块,并且在每个模块中我都需要一个Count,该计数对于所有模块来说都是一个 例如,如果我在购物模块中增加计数,那么我应该在付款模块中获得此增加的计数 我该如何实现?

2 个答案:

答案 0 :(得分:1)

最好的方法是使用共享服务。您的服务可以由每个模块中的组件访问,并且设置简单:

export class CounterService {
  public counter = 0;

  constructor() { }

  incrementCounter(): void {
    this.counter++;
  }

  getCounter(): void {
    return this.counter;
  }
}

这有两个明显的方法可以调用,incrementCounter()每次加1,还有一个get方法。例如,您可能有一个setCounter()可以在其中设置值,或者有一个decrementCounter()可以减少一。

答案 1 :(得分:0)

您可以通过以下两种方式获得计数:

  1. 创建一个shared.service.ts,在其中以以下方式声明getter setter并添加到App.module.ts;

// shared.service.ts


import { Injectable } from '@angular/core';

@Injectable()

export class SharedService {
 
 public count =0;

setCount(countValue:number){
  this.count+= countValue; 
}
getCount():number{
  return this.count;
}

}

  

在app.module中声明的服务在整个应用程序中具有作用域,它们是   只能初始化一次

因此您不会怀疑:“这将在另一个模块中将计数再次初始化为0,我想在一个模块中更新此计数,并希望在另一个模块中访问该修改后的计数”。

现在在要使用计数器的每个组件中,只需使用共享服务调用setter和getter函数即可。

这是工作示例:

https://stackblitz.com/edit/angular-ft4etg

PS:尽管该示例未实现延迟加载,但是为了充分理解其行为。