设置

目前,我正在使用angular2 meteor和meteor-rxjs包 .

说明

带有RXJS可观察的 meteor-rxjs 包裹 ObservableCursor ,我可以轻松订阅该集合并将数据集绑定到组件中的 items 变量 .

一切都很好,直到我想取消订阅当前的数据集并使用 Collection.find() 中的不同mongo选择器查询另一组数据 . 预期结果是只有当前订阅数据的更新才会影响 items 的值,但现在之前的订阅也会在有任何更改时更新 items 的值 .

问题

我怀疑以前的订阅没有取消订阅 . 如何取消订阅 ObservableObservableCursor 的基础mongo游标?

代码

DBService.ts

import { Injectable } from '@angular/core';
import { Observable, Subscription } from 'rxjs';
import { Meteor } from 'meteor/meteor';

@Injectable()
export class DBService {

  constructor() {
    MeteorObservable.subscribe('collection_name').subscribe();
  }

  public getItems(callback: (value) => void): Subscription {

    // do query
    let subscription = Emails.find({/* some selector */}).zone().subscribe(
      (items) => {
        return callback(items);
      }
    );
    return subscription;
  }
}

component.ts

import 'reflect-metadata';
import { Component, OnInit, OnDestroy } from '@angular/core';
import { Subscription } from 'rxjs';

import { DBService } from 'db.service';

@Component({
  .....
})
export class EmailComponent implements OnInit, OnDestroy {

  private subscription: Subscription;
  private items;

  constructor(private dbService: DBService) {}

  public ngOnInit(): void {
    this.subscription = this.dbService.getItems((items) => this.items = items);
  }

  public ngOnDestroy(): void {
    // unsubscribe
    this.subscription.unsubscribe();
  }
}

参考

https://github.com/Urigo/meteor-rxjs