【问题标题】:Horizon/RethinkDB/Ionic2 cannot read property "push" of undefinedHorizo​​n/RethinkDB/Ionic2 无法读取未定义的属性“推送”
【发布时间】:2016-08-16 06:00:53
【问题描述】:

我正在努力解决一个错误。我花了2天多的时间,仍然没有解决... 我使用 Ionic2 作为前端,使用 Horizo​​n 和 RethinkDB 作为后端。我有一张名为“消息”的表格,里面有几条消息。我只想获取所有这些消息并将它们显示在我的主页上。 这是我的代码:

import {Component} from '@angular/core';
import {NavController} from 'ionic-angular';

declare var Horizon;


@Component({
  templateUrl: 'build/pages/home/home.html'
})
export class HomePage {
    test: any[];

  constructor(public navCtrl: NavController) {




  }

  getMessages(){
    let test = [];
    let hz = new Horizon({host: 'localhost:3100'});
    hz.connect();
    let messages = hz('messages');
    messages.watch().subscribe(messages => {
        for(let i = 0; i<messages.length; i++){
                console.log(messages[i].text);
                console.log(messages[i].id);
            this.test.push([{
                text: messages[i].text,
                id: messages[i].id
            }])
        }
    });
  }

}

我尝试了许多 this.test.push 的组合,但仍然没有运气。我做错了什么......希望你们帮助我!

【问题讨论】:

  • 发生这种情况是因为 this.test 未定义。如果您只使用test.push(... 或将let test = []; 更改为this.test = [];,这应该可以工作
  • 该死的......现在一切正常,谢谢!我不知道为什么我没有这样做。

标签: ionic2 rethinkdb horizon


【解决方案1】:

这个问题的答案只是确保引用你认为你正在引用的变量。

this.test 未定义。而不是let test = [];,您应该将其更改为this.test = [];

或者您可以将this.test.push(... 更改为test.push(...,它也应该可以正常工作。

在使用 this 时要小心谨慎,并在 Javascript 中处理范围是该语言中最棘手的部分之一。我希望错误中有一些指示符,说明链中的哪个部分实际上是undefined,因为您认为.pushthis.test 上是undefined,实际上它是test,在this 上未定义目的。

【讨论】:

    猜你喜欢
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 2017-08-12
    • 1970-01-01
    相关资源
    最近更新 更多