更新数组后运行方法

时间:2016-01-08 17:17:29

标签: angular

我有一项服务,我从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观察者只响应输入事件引起的变化,因此也不起作用。 基本上我只需要在填充数组后运行一个方法,我想我错过了一些明显的东西?

1 个答案:

答案 0 :(得分:1)

subscribe()方法返回订阅者,它继承了您可以使用的add()方法:

ngOnInit() {
  this._subjectsService.getSubjects()
    .subscribe( subjects => this.subjects = subjects)
    // add new subscription
    .add(() => console.log('Completed', this.subjects));
}