想要在我的订阅方法中访问全局变量。 Angular,Observable,Subscribe,Typescript

问题描述 投票:0回答:2

我无法在其他方法中访问类型脚本中的全局变量。

因为我在这个方法中初始化了这个“initiatorOffer”全局变量

peerx.on('signal', function(data)
{

   console.log("1");

   console.log(JSON.stringify(data));

   this.targetpeer = data;

   **this.initiatorOffer = JSON.stringify(data);  // i have initialized there**

   console.log(this.initiatorOffer);


}

但是当我在同一个文件的其他方法中得到这个值时,它是:

this._chatservice.clientconnected().subscribe(data => {

   **console.log(this.initiatorOffer);** // getting value

})

我得到了未定义的值。这是为什么?因为这个变量是全局的。

当我从服务器得到响应时调用this.chatservice.clientconnected()方法。

angular global-variables observable undefined subscribe
2个回答
0
投票

我认为Angular没有考虑peerx.on('signal',function(data)中的变化的问题。你可以尝试使用ngZone https://angular.io/api/core/NgZone#ngzone

peerx.on('signal', function(data)
{
   this.ngZone.run(() => {
      console.log("1");
      console.log(JSON.stringify(data));
      this.targetpeer = data;
      this.initiatorOffer = JSON.stringify(data);  // i have initialized there**
      console.log(this.initiatorOffer);
   })
})

0
投票

您应该将函数转换为箭头函数,如下所示:

peerx.on('signal', (data) => {
....
// here you can access 'this' instance
});

这是一个箭头功能。箭头函数是ECMAScript 6引入的一种简短语法,可以类似于使用函数表达式的方式使用。换句话说,您通常可以使用它们代替函数(foo){...}等表达式。但他们有一些重要的区别。

例如,它们不绑定它们自己的值。

请参考此链接: What's the meaning of "=>" (an arrow formed from equals & greater than) in JavaScript?

© www.soinside.com 2019 - 2024. All rights reserved.