【问题标题】:Angular 8 BehaviorSubject can't change the desired valueAngular 8 BehaviorSubject 无法更改所需的值
【发布时间】:2019-07-29 15:02:33
【问题描述】:

我有一个名为global 的服务,其中包含应用程序中所有使用的全局变量。其中一个变量是语言,用户可以在其中将其从一种更改为另一种。单击时,应运行以下方法来更改应用方向:

更改目录() { this.dirService.changeAppDir.next('rtl'); }

dirService 被导入到组件中,BehaviorSubject 正在被访问 changeAppDir 使用 next 更改值。

dirService 具有以下脚本:

export class AppDirService {
  changeAppDir = new BehaviorSubject<string>('');
  dirValue = this.changeAppDir.asObservable();
  constructor() {

  }
}

问题是我不知道如何将全局var语言值更改为next()更改的新值,因此应用程序方向会改变。

这里是 global-var 脚本:

export class GlobarVarService {
  defaultLang:string  ;
  defaultDir:string = "ltr" ;
  constructor() {
  }
}

defaultDir 正在绑定到应用的不同元素。

任何想法,因为这是我第一次使用行为主题方面?

【问题讨论】:

  • 所以你需要更改网址吗?变量是否在窗口范围内?
  • @Robertgarcia 不是网址。应用程序的语言。如何将语言的globarVar 变量连接到其他服务中创建的behaviourSubject 以监控用户是否更改语言
  • 只需在 AppDirService 构造函数中声明您的 globalVarService 并从中进行更改
  • 但是您的 AppDirService 仅具有传播方向更改的属性。它没有可以传播语言更改的属性。如果您还想传播语言更改,则必须添加它们。
  • 你能不能 fork this StackBlitz sample 并尝试在其中复制你当前的问题并与我们分享更新的 stackblitz 以便有人可以查看?

标签: angular angular8 behaviorsubject


【解决方案1】:

您的 appDirService:

export class AppDirService {
  changeAppDir = new BehaviorSubject<string>('');
  dirValue = this.changeAppDir.asObservable();
  constructor(private _globalVar: GlobalVarService) {

  }

  changeDir(value) { 
   this._globalVar.setDefaultLang(value);
   this.dirService.changeAppDir.next(value); 
  }

}

在您的 GlobalVarService 中:

export class GlobarVarService {
  defaultLang:string  ;
  defaultDir:string = "ltr" ;
  constructor() {
  }

  setDefaultLang(value) {
    this.defaultLang = value;
  }
}

【讨论】:

    猜你喜欢
    • 2020-10-31
    • 2020-07-28
    • 2022-11-23
    • 1970-01-01
    • 2020-10-30
    • 2020-08-31
    • 2020-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多