我有一个数据服务,用于在组件中加载数据,如下所示:
this.dataService.getUserData().subscribe(user => {
this.user = user;
});
Run Code Online (Sandbox Code Playgroud)
现在,当数据出现时pushed/set
(像这样this.dataService.setUser(user);
),它会很好地更新组件中的数据!
但是,如果我的组件由于某种原因隐藏然后再次显示,则组件会再次初始化,并且服务也在 init 上成功订阅,但当前数据不会加载到我的组件的user
对象中,直到对数据调用下一次推送/设置服务。
有没有什么方法可以在 init 时不仅订阅服务,还加载数据服务中的当前数据?
你应该使用BehaviorSubject
以下是创建服务的方法。
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
@Injectable()
export class DataService {
private userData = new BehaviorSubject<Object>({}); //user proper datatype and format initially for userdata
userDataInfo = this.userData.asObservable();
constructor() { }
changeUserData(userData: any) {
this.userData.next(userData);
}
}
Run Code Online (Sandbox Code Playgroud)
无论您在何处获取用户数据,都可以像这样调用此服务
this.dataServcie.changeUserData(userData);
Run Code Online (Sandbox Code Playgroud)
当您再次需要这些数据时,只需调用
this.data.tokenInfo.subscribe(userData => {
if(userData) this.userData = userData;
});
Run Code Online (Sandbox Code Playgroud)
就是这样,不需要两个组件都是子父组件,甚至不需要任何关系,这是迄今为止在角度组件之间共享数据的最佳方式。
归档时间: |
|
查看次数: |
2592 次 |
最近记录: |