Angular:全局变量在订阅函数内没有改变

Posted

技术标签:

【中文标题】Angular:全局变量在订阅函数内没有改变【英文标题】:Angular : Global variable not changing inside Subscription function 【发布时间】:2019-09-15 20:16:10 【问题描述】:

我在使用 TypeScript 在 Angular 7 中更改全局变量时遇到问题。

我正在使用一项通过 Restful API 从数据库收集 JSON 数据的服务

服务:

export class myService 
  constructor(private client : HttpClient)  

  dossierSubject = new Subject();
  private dossiers : any[];

  getExtract()
    this.client.get<any[]>('http://localhost:9090/dossiers')
    .subscribe(
      (response) => 
        console.log("Data acquisition in progress");
        this.dossiers = response;
        this.emitDossierSubject();
        console.log('Received data ' + response);
      ,
      (error) => 
        console.log('Error ! : ' + JSON.stringify(error));
      
    );
  

   emitDossierSubject()
    this.dossierSubject.next(this.dossiers.slice());
  

MyService 运行良好,我可以获取我正在寻找的数据, 然后我将服务调用到组件中

组件

 export class tabComponent implements OnInit 

  constructor(private dossierService : myService)  

  private dossierSubscription : Subscription;
  private listeDossiers : any[];

  ngOnInit() 
    this.spinnerStatus = true;
    this.dossierService.getExtract();
    this.dossierSubscription = this.dossierService.dossierSubject.subscribe(
      (dossiers : any[]) => 
        this.listeDossiers = dossiers;
        console.log(listeDossiers); //dossiers [object][object]
        this.spinnerStatus = false;
      
    );
    console.log('Received data : '+ this.listeDossiers);  //undefined
  

拜托,我想知道为什么我的全局变量“listeDossiers”只在订阅函数内改变。

我尝试使用“listeDossier”的主题并在我更改订阅内的变量后刷新它,但没有成功。

感谢您的帮助。

【问题讨论】:

放在 .subscribe 中 谢谢你 Sajeetharan,我不明白,我应该把什么放在 .subscribe 中? 【参考方案1】:

我认为console.log(listeDossiers); 应该是console.log(this.listeDossiers);

subscribe 之外的 console.log 将被调用,但不会等待 http 请求,您尝试将其打印为 ngOnInit() 函数的一部分而无需等待,但它仅在 subscribe 内你实际分配它

【讨论】:

谢谢 Jojofoulk,我明白了,有什么方法可以让我分配全局变量以便以后使用它?

以上是关于Angular:全局变量在订阅函数内没有改变的主要内容,如果未能解决你的问题,请参考以下文章

如何用eval()函数在局部函数内改变全局变量

python函数中局部变量与全局变量遵守规则

关于JS 函数里 修改 全局变量 的问题

如何修改全局变量的值

js在函数中传进全局变量,修改全局变量问题。

python全局变量-局部变量用法和区别