【发布时间】:2019-12-05 15:14:39
【问题描述】:
我有一个角度服务如下:
export class AuthService {
private data$: Observable<DataModel[]>;
constructor(private noteService: NoteService, private dataService: DataService) { }
getData() {
this.data$ = this.dataService.get();
}
authorize(requirement: Requirement) : Observable<boolean> {
// Code that uses $data. Example:
return this.data$.pipe(
map(data => data.type == 12))
);
}
}
而DataService 就是以下内容:
export class DataService {
constructor(private httpClient: HttpClient) { }
public get(): Observable<DataModel[]>> {
return this.httpClient.get<DataModel[]>>(`auth/data`);
}
}
我在调用授权方法的组件和指令中注入AuthService。
方法authorize需要使用data$设置data$。
当检测到通知时,还必须使用getData() 重新加载data$:
this.noteService.get().subscribe((note: Note) => {
if (note.code == 0)
this.getData(); // Reload data
});
问题
我不确定如何将此要求集成到 AuthService 中。
- 如何判断
data$是否被定义并获取初始数据? - 在哪里检查是否收到代码为 0 的通知并重新加载
data$? - 如何确保
authorize方法中的代码等待 data$ 完成加载,以防在调用授权时加载?
是因为最初被加载还是因为正在重新加载?
【问题讨论】:
-
您能否分享您的
DataService的相关部分,以帮助我更好地了解您的 observable 的来源? -
我只是更新我的答案。
DataService使用HttpClient从 API 获取数据
标签: angular typescript rxjs angular8