Выполнение кода на дочерней странице маршрута перед выполнением обратного вызова обещания на родительской странице маршрута в Angular 6 - PullRequest
0 голосов
/ 29 января 2020

У меня есть компонент страниц, чей файл маршрутизации 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? Пожалуйста, помогите мне с этим

1 Ответ

0 голосов
/ 29 января 2020

Просто внесите изменения, подобные этому

, в свой файл common.service.ts

public get currentUserValue(): any {
    return  this.currentUserSubject.asObservable();
 } 

и в свой файл home.component.ts

 ngOnInit(){
     this.commonService.currentUserValue.subscribe(user => console.log(user));
  }
...