【发布时间】:2018-06-18 17:05:36
【问题描述】:
我正在尝试多次订阅相同的Observable,但它不起作用。我有一个提供者,它给了我来自AngularFirestore 对象的Observable。这是我的提供者:
@Injectable()
export class MyProvider {
private myObservable: Observable<any>;
constructor(private aFs: AngularFirestore) {
//retriving some data and putting in myObservable
}
getObservable() {
return this.myObservable;
}
}
在我的myPage.ts 我这样做:
this.mySubscription = this.myProvider.getObservable().subscribe(value => {
//something that works
});
在另一个组件中我也这样做,但它没有给我任何东西。如何从服务或提供商共享Observable?我试过unsubscribe()它,当我从我的页面弹出到组件时,当我在组件上调用unsubscribe()然后我导航到我的页面时,subscribe()不起作用。
在我的页面中发送unsubscribe():
ionViewWillLeave() {
this.mySubscription.unsubscribe();
}
到我的组件中的unsubscribe(),在我导航到我的页面之前,我会这样做:
myEvent() {
this.mySubscription.unsubscribe();
this.navCtrl.push(MyPage);
}
当我从 MyPage 弹出时,unsubscribe() 似乎工作正常,因为我可以在我的组件中看到 myObservable 数据。当我尝试从我的组件导航到MyPage 时,unsubscribe() 似乎不起作用,因为我什么也看不到。我也尝试过调试,但在第二种情况下,subscribe() 什么也看不到。
我在providers 下的app.module.ts 中导入我的提供程序,然后在我的页面中导入它:
MyPage.ts
import { MyProvider } from ..;
构造函数(MyPage.ts):
constructor(private myProvider: MyProvider) {..}
在我的组件中:
我的组件.ts
import { MyProvider } from ..;
构造函数(Home.ts)
constructor(private myProvider: MyProvider) {..}
我澄清MyComponent 没有在MyPage 中使用!我在Home 中使用它,然后我用它推送到MyPage。我这样做是因为我想在MyComponent 中显示简单数据,然后我想推送到包含数据详细信息的MyPage。
很容易,我想在组件和页面上共享从服务中检索到的同一个 Observable,并且我想在两者上都 subscribe() 它。这可能吗?
【问题讨论】:
-
您确定提供者是作为单例提供的吗?
-
不,我也这么认为,但我不明白如何使它成为单例。我正在使用打字稿,这是我第一次尝试提供者。
-
你能说明你在哪里提供/导入 Provider 吗?
-
我更新了问题。
-
分享你的 app.module.ts.
标签: angular ionic-framework rxjs observable