У меня есть компонент страниц, чей файл маршрутизации pages.routing.ts имеет следующую маршрутизацию
const routes: Routes = [
{
path: 'pages',
component: PagesComponent,
children: [
{ path: 'home', loadChildren: './home/home.module#HomeModule'}
]
}
];
Код в файле pages.component.ts:
ngOnInit() {
this.commonService.canAccess()
.then(response => {
if(response['data']) {
sessionStorage.setItem('currentUser', JSON.stringify(response['data']));
this.commonService.updateCurrentUserValue(response['data']);
}
},
() => {
// handle error here
});
}
В общая служба, у меня есть 'currentUserSubject', который является BehaviorSubject, и я выставляю это значение, используя метод получения publi c, чтобы я мог получить к нему доступ из других компонентов. Код в файле common.service .ts:
constructor(private http: HttpClient) {
this.currentUserSubject = new BehaviorSubject<string>(sessionStorage.getItem('currentUser'));
}
public get currentUserValue(): any {
return JSON.parse(this.currentUserSubject.value);
}
public updateCurrentUserValue(currentUser: any) {
this.currentUserSubject.next(JSON.stringify(currentUser));
}
async canAccess() {
return await this.http.request('GET', this.apiUrl, httpOptions)
.pipe(
map(response => {
return response;
}))
.toPromise();
}
Теперь я пытаюсь использовать currentUserValue в моем файле home.component.ts, как показано ниже.
ngOnInit() {
const currentUser = this.commonService.currentUserValue;
}
проблема заключается в том, что код внутри обратного вызова then в файле pages.component.ts выполняется, код в ngOnInit файла home.component.ts выполняется, а currentUser в домашнем компоненте имеет значение null. Как сделать так, чтобы код обратного вызова в файле pages.component.ts выполнялся раньше, чем код в home.component.ts? Пожалуйста, помогите мне с этим