如何解决" _这是未定义的"在角2

时间:2017-04-09 01:26:56

标签: javascript angular firebase

我试图通过从firebase数据库中获取项目并将它们推送到列表来填充列表。经过大量的搜索,我在我的代码中达到了这一点:

this.angFire.database.list('/SpareParts', {
  query: {
    orderByChild: '',
    limitToFirst: this.limit  // this is a BehaviorSubject<number>(3)
  }
}).subscribe(items => items.forEach(item => function f(j) {
  setTimeout(() => {
    console.log('timeout');
    this.items.push(item);
    if (--j) f(j);
  }, 3000)
}.bind(this)(3) ));

在这里,我只从firebase获取3件物品。代码确实在某种程度上起作用。它通过 setTimeout ,在列表中同时推送三个项目,在完成后,它会因错误而崩溃:

  

_这是未定义的

在此之前,我收到了错误

  

这是未定义的

所以我使用的.bind函数仍然没有用。

对此有任何建议将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:1)

将其存储为函数之外的变量,并使用该引用来引用您的组件。

var self = this; // <-- store here
this.angFire.database.list('/SpareParts', {
  query: {
    orderByChild: '',
    limitToFirst: this.limit  // this is a BehaviorSubject<number>(3)
  }
}).subscribe(items => items.forEach(item => function f(j) {
  setTimeout(() => {
    console.log('timeout');
    self.items.push(item); // <-- use here
    if (--j) f(j);
  }, 3000)
}.bind(this)(3) ));