设置
目前,我正在使用angular2 meteor和meteor-rxjs包 .
说明
带有RXJS可观察的 meteor-rxjs
包裹 ObservableCursor
,我可以轻松订阅该集合并将数据集绑定到组件中的 items
变量 .
一切都很好,直到我想取消订阅当前的数据集并使用 Collection.find()
中的不同mongo选择器查询另一组数据 . 预期结果是只有当前订阅数据的更新才会影响 items
的值,但现在之前的订阅也会在有任何更改时更新 items
的值 .
问题
我怀疑以前的订阅没有取消订阅 . 如何取消订阅 Observable
和 ObservableCursor
的基础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();
}
}