Ionic3:无法从 events.subscribe内部访问类属性



我有一个正在侦听事件的类。当该事件发生时,我想将附带 even 的数据推送到数组并显示它。这是我的班级:

export class randomClass {
  someArray:Array<string>;
  constructor(public navCtrl: NavController, 
              public navParams: NavParams,
              public events: Events) {
    events.subscribe('event',
      (data) => {
        //some random code
        this.someArray.push(data); //this fails
      }
    )
  }

我得到的错误是:类型错误:未定义不是一个对象(评估 "_this.沟通.推送")

我想这是微不足道的,但在任何地方都找不到答案。

好的。问题是我必须用一个空数组初始化属性(有人可以解释为什么吗?下面解决了问题。

communication:Array<string> = [];

问题是我必须用空初始化属性 数组(有人可以解释为什么吗?

当你这样做时

someArray: Array<string>;

您只是声明一个名为 someArray 的属性并将其类型设置为 stringsArray但您没有初始化该属性,因此最初someArray将是undefined

因此,当您尝试执行此操作时:

this.someArray.push(data);

由于this.someArray是未定义的,因此您正在尝试调用undefinedpush方法,该方法不存在(这就是为什么错误说类似TypeError:undefined不是一个对象)。

就像你说的,解决方案是用空Array初始化someArray。这样,您将能够调用 push 方法,因为它是在类型为 Array 的每个对象中定义的。

someArray: Array<string> = [];

问题是当将此代码转译为 javascript 时,变量 someArray 的值等于 undefined。这就是转译器的工作原理。不能将数据推送到未定义的变量中。因为它不是一个数组。如果将其初始化为 someArray:Array<string> = [] 它将被转译为var someArray = []。现在,您可以将数据推送到数组中。

相关内容

  • 没有找到相关文章

最新更新