我有一项服务,我从Firebase获取一些数据。该服务提供了一个可观察的,然后我在我的组件类中订阅。当数据被加载并发送到数组时,DOM会使用新数据进行更新,但我需要在DOM更新后再次运行一些javascript和jQuery代码,我无法弄清楚如何使用。
我的服务方法如下:
getSubjects() {
return new Observable(observer => {
this.subjectsRef.orderByChild('name').on("value", snapshot => {
var tempArr = [];
snapshot.forEach(function(data) {
var subject = {
name: data.val().name,
imgUrl: data.val().imgUrl,
description: data.val().description,
teachers: data.val().teachers
}
tempArr.push(subject);
});
observer.next(tempArr);
});
// this.broadcastUpdate();
});
}
我的组件:
export class SubjectsCmp implements AfterViewInit, OnInit, OnChanges {
constructor(
private _subjectsService: SubjectsService
) {
}
ngOnInit() {
this._subjectsService.getSubjects().subscribe( subjects => this.subjects = subjects);
}
}
我看了一下documentation for RxJS,但无济于事。我以为我可以改写它来跟随他们给出的例子::
var subscription = source.subscribe(
function (x) {
console.log('Next: %s', x);
},
function (err) {
console.log('Error: %s', err);
},
function () {
console.log('Completed');
});
但'已完成'永远不会开火。
Angular 2的onChanges观察者只响应输入事件引起的变化,因此也不起作用。 基本上我只需要在填充数组后运行一个方法,我想我错过了一些明显的东西?
答案 0 :(得分:1)
subscribe()
方法返回订阅者,它继承了您可以使用的add()
方法:
ngOnInit() {
this._subjectsService.getSubjects()
.subscribe( subjects => this.subjects = subjects)
// add new subscription
.add(() => console.log('Completed', this.subjects));
}