ngOnInit 在解析器数据准备好之前调用

ngOnInit is calling before resolver data is ready

我下定决心从服务中调用 getSchools()

resolver.ts

export abstract class APIResolverService implements Resolve<any> {
          constructor(readonly dropdownService:DropDownOptionsService,readonly route:ActivatedRoute) { }
          abstract resolve();
        }


export class APISchoolsresolve extends APIResolverService{

      resolve(){
        this.route.queryParams.subscribe(params => {
          let district = params['district'];
          return this.dropdownService.getSchools(district);   
        })
      }

我的服务

async getSchools(districtID:number){
    return await this.http.get<ISchool[]>(`api/GetSchools/` + districtID).toPromise();
  }

我的组件

this.activatedRoute.data.subscribe((data) =>{

      console.log(data);
    })

我在组件中的数据未定义,因为它在我的解析器获取数据之前被调用。

我该如何解决这个问题?

你的 resolve 方法没有 return 任何东西。所以路由器不会等待任何事情被解决:它可能订阅或等待什么?

此外,resolve 方法采用 ActivatedRouteSnapshot。这就是您应该从中获取 districtID 的地方。

解析器应如下所示:

export class APISchoolsresolve implements Resolve<Array<ISchool>> {
  constructor(private dropdownService: DropdownService) { }

  resolve(route: ActivatedRouteSnapshot): Promise<Array<ISchool>> {
    return this.dropdownService.getSchools(+route.paramMap.get('district'));
  }
}