typescript 如何在Angular 中将布尔变量从一个服务传递到另一个服务

wlwcrazw  于 2022-11-18  发布在  TypeScript
关注(0)|答案(2)|浏览(105)

我试图将一个布尔值从一个服务传递到其他服务文件,因为我得到的布尔值未定义,我在Angular 中没有找到任何与之相关的示例和文档,有人能指导我吗
需要从该文件传递一个布尔值:

Auth.service.ts

public Data: boolean;

passValueFunction(){
this.Data =true
}

在这个服务文件中,我需要从auth服务文件中获取布尔值(auth.service文件中数据变量)

second.service.ts

constructor(private authService: Authservice){
}

ngOninit(){
console.log(this.authService.Data)
}

在第二个服务文件中,我得到的数据值不是true。我希望在第二个服务文件中.authService.Data = true。我不知道为什么得到.authService.Data= undefined。

t9eec4r0

t9eec4r01#

问题是关于你的second.service.ts的初始化早于函数:

passValueFunction(){
  this.Data =true
}

这里你可以有几个不同的解决方案,以防你期望从这个服务之间的通信。如果您需要仅在Data值更改为true时触发second.service.ts中的某个函数,我建议您在Auth.service.ts中创建一个ObservableBehaviorSubject,并在second.service.ts中订阅此Observable/BS的值。

htrmnn0y

htrmnn0y2#

下面是一个如何执行此操作的示例。

在service1.service.ts(或您的身份验证服务)中:

export class Service1Service {

  public data = false;

  constructor() { }

  passValueFunction(){
    this.data =true
  }
}

在服务2.service.ts(或您的第二个.service.ts)中:

export class Service2Service {

  constructor(
    private service1: Service1Service
  ) { }

  getValue() {
    console.log(this.service1.data);
  }
}

在使用第二个服务的组件中:

constructor(
    private service2: Service2Service,
    ){
    
  }

  // this method is promted by button
  async onTestAnything() {

    //this.service1.passValueFunction();  // add this method if you 1st want to set the bool using the passValueFunction() method

    this.service2.getValue();
  }

我只使用第二个服务,第二个服务正在从第一个服务阅读数据bool,因此bool已被传递

相关问题