import { Injectable } from '@angular/core'; import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; import { Result, User } from '../models/onchat.model'; import { UserService } from '../services/apis/user.service'; import { GlobalData } from '../services/global-data.service'; /** * 用户Resolve,根据路由参数中的userId来获得user */ @Injectable({ providedIn: 'root', }) export class UserResolve implements Resolve<User> { constructor( private userService: UserService, private globalData: GlobalData ) { } resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<User> | User { const userId = +route.params.userId; const { user } = this.globalData; return (user?.id === userId) ? user : this.userService.getUser(userId).pipe( map(({ data }: Result<User>) => data) ); } }