ngOnInit在解析器数据准备就绪之前正在调用

时间:2019-05-05 15:15:04

标签: typescript angular6 angular-resolver

我有一个解决方案,可以从服务中调用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);
    })

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

我该如何解决?

1 个答案:

答案 0 :(得分:2)

您的resolve方法不返回任何内容。因此,路由器无需等待任何问题解决:它可能订阅或等待什么?

此外,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'));
  }
}