2017-12-22 10 views
0

角度5のプロジェクトでは、ビューがロードされる前にリゾルバを実行します。問題は、リゾルバから戻したいデータが観測可能なデータに依存していることです。何が表示されているビューに移動しようとしたときに、このコードでAngular execute resolve with observable

@Injectable() 
export class PlayersService { 
    standingsSubject = new ReplaySubject<any>(); 
    standings$ = this.standingsSubject.asObservable(); 

    constructor(private http: HttpClient) {} 

    getStandings(): void { 
    this.http.get('http://localhost:8080/api/fixtures/standings') 
     .subscribe((response: any) => { 
     this.standingsSubject.next(response); 
     }); 
    } 
} 

リゾルバ:リゾルバが使用する

@Injectable() 
export class PlayersResolver implements Resolve<any> { 
    constructor(private playersSrv: PlayersService) { 
    this.playersSrv.getStandings(); 
    } 

    resolve() { 
    return this.playersSrv.standings$; 
    } 
} 

サービスこれはコードです。どのように私のコンポーネント内のデータを取得する解決策を実装することができますか?

ありがとうございます。

+0

これを信頼してください。あなたはサービスの中で購読したくない。 –

+0

こんにちはJota.Toledo、どうしてですか? –

答えて

2

1.サービス機能から観察してください。 2.サービスから購読を削除します。 は自動的に観測可能

resolve():observable<any>{ 
return this.playersSrv.getStandings().map((data)=>{//do something with data}) 
} 

4.Resolveガードを返すサービスコールに加入すると次のルートは、そのが解決する場合にのみロードされているサービス機能これにより、次にへのコールを返す解決方法でサービス関数を呼び出し3.Just

+0

申し訳ありませんが動作しません。 'Property 'map'が型 'Observable ' ' –

+0

に存在しません。サービスからobservableを返そうとしません...演算子をインポートしましたか?インポート 'rxjs/add/operator/map'; getStandings(){ これを返す.http.get( 'http:// localhost:8080/api/fixtures/standingings')} – RRForUI

+0

ああ、そうだった。ありがとう!! –