2017-01-18 17 views
1

getReportサービスがデータを返す前に、コンポーネントのngOninitがヒットしています。サービスが解決されるのを待っていません。経路が解決される前に角度2のコンポーネントがロードされる

ルーティング:

@Injectable() 
class ReportResolver implements Resolve<any> { 
constructor(private reportsService: ReportsService) { 
} 
resolve(
    route: ActivatedRouteSnapshot, 
    state: RouterStateSnapshot 
): any { 
    this.reportsService.GetReport(route.params["id"]).subscribe((data: any) => { 
     return data; 
    }); 
}} 

const appRoutes: Routes = [ 
{ 
    path: "reports/:id", 
    component: TabularReportsFachadeComponent, 
    resolve: { report: ReportResolver } 
}, 
{ 
    path: "", 
    component: DashboardComponent 
},]; 

サービス:

GetReport(id: any): Observable<any> { 
    return this._http.get("api/reports/?" + id).map(res => res.json()); 
} 

コンポーネント:

ngOnInit(): void { 
    debugger 
    this.report = this.route.snapshot.data["report"].data; 

} 

getReport

答えて

1

前に打たれngOninitコンポーネントはObservableを返し、Subscriptionを返しません。実際には、resolveは何も返しませんが、にsubscribe()と呼ぶべきではありません。これはSubscriptionを返すためです。

戻す前に値を処理する必要がある場合は、代わりにmap((val) => ...)などの演算子を使用してください。

resolve(
    route: ActivatedRouteSnapshot, 
    state: RouterStateSnapshot 
): any { 
    return this.reportsService.GetReport(route.params["id"]) 
}} 
+0

サブスクライブを削除して機能しました。ありがとう! – janIreal23

+0

嬉しいことに:)フィードバックに感謝します。 –

関連する問題