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

时间:2017-11-03 05:01:40

标签: angular typescript events ionic2 ionic3

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

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
      }
    )
  }

我得到的错误是:TypeError:undefined不是一个对象(评估             &#39; _this.communication.push&#39)

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

3 个答案:

答案 0 :(得分:1)

确定。问题是我不得不用一个空数组初始化属性(有人可以解释原因吗?)。以下解决了这个问题。

communication:Array<string> = [];

答案 1 :(得分:1)

  

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

当你这样做时

someArray: Array<string>;

您只是声明了一个名为someArray的媒体,并将其类型设置为Array strings,但您并未初始化该媒体资源,因此最初someArray将为undefined

所以当你尝试这样做时:

this.someArray.push(data);

由于this.someArray未定义,因此您尝试调用push undefined的{​​{1}}方法,该方法不存在(这就是错误说明的原因)喜欢 TypeError: undefined不是对象 )。

正如您所说,解决方案是使用空someArray初始化Array。这样,您就可以调用push方法,因为它在类型为Array的每个对象中都已定义。

someArray: Array<string> = [];

答案 2 :(得分:0)

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