我无法在其他方法中访问类型脚本中的全局变量。
因为我在这个方法中初始化了这个“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没有考虑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);
})
})
您应该将函数转换为箭头函数,如下所示:
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?