Как вернуть результат внутреннего наблюдаемого в преобразователе маршрутов Angular - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь написать что-то вроде простого метода для получения данных профиля пользователя для моего Angular приложения и загрузки этих данных перед переходом на страницу профиля с помощью преобразователя. . Резолвер не завершает работу, хотя ошибок нет. Это мой код для класса резолвера:

export class ProfileResolverService implements Resolve<Observable<any>> {

  constructor(private fs: FirestoreService, private auth:AuthService) { }

   resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot){
    return this.auth.user.pipe(take(1),
      mergeMap(userdata => {
        return this.fs.getUserProfile(userdata.uid) //get user profile returns  Observable<unknown[]>
      })
    )
    
  }
   
}

и в моем модуле маршрутизации:

path: 'profile',
            children: [
                {
                    path: '',
                    resolve: {
                      userdata: ProfileResolverService
                    },
                    loadChildren: () => import('../profile/profile.module').then( m => m.ProfilePageModule)
                }

Кто-нибудь может помочь. Был на этом 2 дня

Ответы [ 2 ]

0 голосов
/ 12 июля 2020

Обнаружил проблему там:

export class ProfileResolverService implements Resolve<Observable<any>> {

  constructor(private fs: FirestoreService, private auth:AuthService) { }

   resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot){
    return this.auth.user.pipe(take(1),
      mergeMap(userdata => {
        return this.fs.getUserProfile(userdata.uid).pipe(take(1),map(user => user)); //had to map the output of the observable and then fetch it in my rout resolver
      })
    )
    
  }
   
}```

So my resolver now looks like this:

путь: 'profile', дети: [{path: '', разрешите: {user: ProfileResolverService \ get user вместо userdata}, loadChildren: () => import ('../ profile / profile.module'). then (m => m.ProfilePageModule)}

0 голосов
/ 11 июля 2020

Может быть 2 причины:

  • this.auth.user не выдает никакого значения
  • this.fs.getUserProfile(userdata.uid) не завершается

Попробуйте это посмотрите, есть ли у вас какие-либо журналы:

    return this.auth.user.pipe(
      take(1),
      mergeMap(userdata => {
        console.log('userdata: ', userdata);
        return this.fs.getUserProfile(userdata.uid).pipe(
          tap(profile => console.log('profile: ', profile));
          finalize(() => console.log('getUserProfile complete or error'));
        )
      })
    )

Если ваш код в порядке, вы должны хотя бы иметь журнал userdata и getUserProfile

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...