Angular 离子2热/冷观测值

Angular 离子2热/冷观测值,angular,ionic2,angular2-observables,Angular,Ionic2,Angular2 Observables,您好,我正在开发一个应用程序,其中我有一个userService类,用于管理用户数据。在这里,我创建了如下可观察对象: 导出类用户服务{ 当前用户; 用户可观察; 用户观察者; 构造函数(公共http:http,私有db:Database,私有平台:platform){ this.platform.ready()。然后(()=>{ this.userObservable=Observable.create(Observable=>{ this.userObserver=observer; 设置超

您好,我正在开发一个应用程序,其中我有一个userService类,用于管理用户数据。在这里,我创建了如下可观察对象:

导出类用户服务{
当前用户;
用户可观察;
用户观察者;
构造函数(公共http:http,私有db:Database,私有平台:platform){
this.platform.ready()。然后(()=>{
this.userObservable=Observable.create(Observable=>{
this.userObserver=observer;
设置超时(()=>{
this.getCurrentUser()。然后((数据)=>{
this.userObserver.next(this.currentUser);
});
},600);
}).publish();
this.userObservable.connect();
});
}
保存用户(用户){
这个.db.insertUserToUsers(用户)。然后(()=>{
this.currentUser=user;
this.userObserver.next(this.currentUser);
});
}
getCurrentUser(){
返回新承诺(解决=>{
this.db.getUser().then((数据)=>{
this.currentUser=数据;
解析(此.currentUser);
});
});
}
然后我在主页和构造器的用户页面上订阅它,如下所示:

this.platform.ready()。然后(()=>{
this.userService.getCurrentUser()。然后((数据)=>{
this.currentUser=数据;
});
this.userSubscription=this.userService.userObservable.subscripte((数据)=>{
控制台日志(数据);
this.currentUser=数据;
});

问题是,observable开始发出值,除了homepage之外一切都正常,但它在用户页面上不起作用,因为它在observable开始发出的那一刻没有被订阅。有什么办法解决这个问题吗?如果我使用observable而不使用
publish()
connect()
,它也不起作用,因为某些原因-主页订阅正常,用户页面订阅正常,但在此之后,第一次订阅(从主页订阅)停止工作。有什么想法吗?

您应该将用户存储在您的服务中并引用该对象。对于您的components对象,因此保持不变的实例您的意思是直接引用主页和用户页中userService中的currentUser变量?像这样。userService.currentUser?或在userService中创建getter,这将返回给您将在组件中使用:this.currentUser=this.userService.currentUser。