首页 > 解决方案 > Angular,更改事件处理程序外部的变量

问题描述

我正在尝试更改一个变量以匹配通过 WAMP 路由器从我的后端传入的 JSON。但是,在我的事件处理程序中,当我尝试 console.log() 时,外部变量总是未定义。此外,事件处理程序中变量的更改不会应用于外部变量,我不明白为什么......

这是我的服务,数据应该从后端“到达”并被更改我不能真正创建一个正在运行的堆栈闪电战,因为后端数据和 WAMP 非常需要集成/模拟。

export class HouseService {  
public JSONObject: any; //this variable does not change
// function called to connect to wamp

constructor(){
  this.JSONObject = 'test';  
}

 getWampCon(){
    this.wampConnection.open();
    this.wampConnection.onopen = (session) => {
      console.log('wamp connected');
      session.subscribe('some.wamp.topic', this.onevent1).then(
      (subscription) => {
        console.log('ok, subscribed with ID ' + subscription.id);
      },
      (error) => {
       console.log(error);
      }
   );
  };
  // Event Handler
  onevent1(args, kwargs) {
    console.log('got event:', args, kwargs);
    console.log(this.JSONObject); // returns undefined and i don't get why
    this.JSONObject = args[0];
  }
}

功能

getWampCon() 然后在显示组件中调用

我想得到类似于以下 Angular JS版本的东西:

   function onevent1(args, kwargs) {
      console.log("got event:", args, kwargs);
      var scope = angular.element(document.getElementById('Receiver')).scope();
      scope.$apply(function() {
          scope.showMe(args[0]);
      });
   }

标签: angulartypescriptevent-handling

解决方案


console.log(this.JSONObject); // returns undefined and i don't get why

因为“this”关键字的范围与 HouseService 类不同。这是一个关于 javascript 的古老故事。

尝试这样做:

session.subscribe('some.wamp.topic',(args,kwargs)=>{ this.onevent1(args,kwargs);}).then(...


推荐阅读