0

我想在开始渲染组件之前从服务器获取异步数据。我试图使用路由解析器,但我看不出它有什么帮助。

我可以使用以下方法通过 ActivatedRoute 访问组件中的解析器数据:

ngOnInit() {
this.route.data.subscribe((data : Data) => {
  this.caseDataManager.setCase(data['casedata']);
});

在“订阅”中的异步代码完成之前,组件会被初始化和渲染。

正确的方法是什么?

更新:我的解析器代码:

import { Injectable } from '@angular/core'
import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'
import { Observable } from 'rxjs/Observable'
import { Server } from '../shared/server.service'

@Injectable()
export class WorkspaceResolver implements Resolve<any>  {

constructor(private server : Server) {}

resolve(route : ActivatedRouteSnapshot, state : RouterStateSnapshot) : Observable<any>  {
    return this.server.loadCase(route.params['caseid']); #loadCase is basically "return this.http.get(API_URL+'/case/'+caseid).map(resp => resp.json()"
}

}

4

2 回答 2

0

你的解析器看起来不错。现在您需要在您的路线中使用它,如下所示:

path: '/some/path',
component: SomeComponent,
resolve: {
  workspace: WorkspaceResolver
}

不要忘记提供解析器。

现在在显示组件之前获取数据。

于 2017-07-11T15:18:34.287 回答
0

您必须将您的解析函数订阅到您的 component.ts 上的 ngOnInit() 方法中并获取 component.html 上的每个项目。所以你的组件将从它的初始化中获取数据并渲染它。

constructor(private myService: APIService) {}

  ngOnInit() {
    this.myService.getService()
      .subscribe(response => this.data = response);
  }
于 2017-07-11T14:06:05.623 回答