Ionic framework ngFor won';从Firebase API返回信息后更新列表

Ionic framework ngFor won';从Firebase API返回信息后更新列表,ionic-framework,angular,Ionic Framework,Angular,我这里有我用爱奥尼亚公司设置的代码。一切正常。 我可以将我的结果从Firebase注销到控制台,但当我将它们分配到ngFor列表时,它们仍然没有定义,这似乎是从列表中看到的。由于某些原因,它们没有更新。一旦我从服务器获取了一些异步数据,是否有办法使UI更新 从'angular2/core'导入{Injectable}; 从'rxjs/Rx'导入{Observable}; @可注射() var ref=新的Firebase('https://myapi.firebaseio.com'); 申报v

我这里有我用爱奥尼亚公司设置的代码。一切正常。 我可以将我的结果从Firebase注销到控制台,但当我将它们分配到ngFor列表时,它们仍然没有定义,这似乎是从列表中看到的。由于某些原因,它们没有更新。一旦我从服务器获取了一些异步数据,是否有办法使UI更新

从'angular2/core'导入{Injectable};
从'rxjs/Rx'导入{Observable};
@可注射()
var ref=新的Firebase('https://myapi.firebaseio.com');
申报var火基;
出口类新闻服务{
构造函数(){
}
获取(源){
返回新的可观察对象(观察者=>{
参考一次('value',快照=>{
next(snapshot.val().News[source]);
observer.complete();
});
});
}
}
/*~~~~~~~~~~~~~~*///其他文件///*~~~~~~~~~~~~~~~*/
从“ionic framework/ionic”导入{Page,NavController,NavParams};
从“../../shared/services/news service”导入{newservice};
@页面({
templateUrl:'build/pages/news/news.html',
提供者:[新闻服务]
})
出口类新闻{
项目:阵列;
构造函数(专用导航:导航控制器、导航参数:导航参数、新闻服务:新闻服务){
var subscription=newservice.get('businesstech').subscription(
val=>this.items=val,
err=>console.log(err),
() => {
订阅。取消订阅();
}
) 
}
}

新闻
{{item.title}
{{item.atl}}

打开
变量
ref
是在Angular2上下文之外创建的。您应该在服务的构造函数中初始化它:

export class NewsService {
  constructor() {
    this.ref = new Firebase('https://myapi.firebaseio.com');
  }

  (...)
}

除了@ThierryTemplier的精彩答案外:

Angulars代码在Angulars区域内运行,该区域经过修补,因此Angular知道何时运行更改检测。
当在Angulars区域外运行的代码,如在Angulars代码外初始化
new Firebase()
时,它在区域外运行,Angular无法识别模型更改。
从Angular组件的构造函数(或使用Angular指令、服务等的其他地方)运行它可以修复它


另请参见

对于指出这一点,看起来像是一个重复的感谢。但愿我能找到它,但在这个丛林里我不知道该打什么。我搜索了整个网络,没有得到帮助,也不知道如何回复,但在我的控制台上,它注销了“EXCEPTION:TypeError:无法读取[null]中未定义的属性'src',这是来自viewFactory的。编辑:这就是我的HTML似乎无法获取链接的图像。我意识到,基本上,观察者首先会收到一个空数组,其中包含挂起结果的实际长度。我会说,您要显示的项目定义不足(请参见
)。这在JavaScript中是可能的,因为
undefined
是一个值。所以您可能在这里犯了一个错误:
snapshot.val().News[source]
。您需要检查接收数据的结构。。。