Желание получить доступ к глобальной переменной в моем методе подписки. Угловой, Наблюдаемый, Подписаться, Машинопись
Я не могу получить доступ к глобальной переменной в сценарии типа в другом методе.
Поскольку я инициализировал эту глобальную переменную "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()
Метод вызывается, когда я получаю ответ от сервера.
2 ответа
Я думаю, что проблема в том, что Angular не учитывает изменения в вашем peerx.on('signal', function(data). Вы можете попробовать использовать ngZone https://angular.io/api/core/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, который можно использовать аналогично тому, как вы использовали бы выражения функций. Другими словами, вы часто можете использовать их вместо выражений, таких как function (foo) {...}. Но у них есть некоторые важные различия.
Например, они не связывают свои собственные значения этого.
Обратитесь к этой ссылке:
Что означает "=>" (стрелка, образованная из равно и больше, чем) в JavaScript?