2016-08-15 46 views
0

我正在努力解决一个错误。它花了我2天,仍然没有解决方案... 我使用Ionic2作为前端,Horizo​​n使用RethinkDB作为后端。我有一张名为“消息”的表格,里面有很少的消息。我只想获得所有这些信息并在我的主页上显示。 这里是我的代码:Horizo​​n/RethinkDB/Ionic2无法读取未定义的属性“push”

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多种组合,但仍然没有运气。我做错了什么......希望你们帮助我!

+0

发生这种情况是因为'this.test'未定义。如果你只是使用'test.push(...'或将'let test = [];'改为'this.test = [];' – dalanmiller

+1

该死的......现在一切正常,谢谢!不知道为什么我没有那样做。 – Patrick1870

回答

2

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

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

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

使用this时保持谨慎,Javascript中的杂耍范围是该语言中最棘手的部分之一。我希望在错误中存在一些指示符,指示链中的哪个部分实际上是undefined,因为您认为.pushundefined,因为this.test实际上它是test,它在this对象上未定义。

相关问题