2016-08-24 5 views
1

jhon papaのサンプル(クイックスタートプログラム)のサンプルアプリケーションを作成しました。 iはhttp://localhost:8081//Myserver/rest/herosAngular2 restはバックグラウンドで呼び出します

import { Injectable } from '@angular/core'; 
import { Http, Response , Headers} from '@angular/http'; 
import 'rxjs/add/operator/toPromise'; 
import { Hero } from './hero'; 
import { Code } from './code'; 
import { HEROES } from './mock-heroes'; 

@Injectable() 
export class HeroService { 
    constructor(private http: Http) { } 
      private heroesUrl = 'http://localhost:8081//Myserver/rest/heros'; // URL to web api 


    getHeroes() { 
     return this.http.get(this.heroesUrl) 
      .toPromise() 
      .then(
      response => response.json() as Hero[]) 
      .catch(this.handleError); 
    } 
    getHero(id: number) { 
     return this.getHeroes() 
      .then(heroes => heroes.find(hero => hero.id === id)); 
    } 

    private handleError(error: any) { 
     console.error('An error occurred', error); 
     return Promise.reject(error.message || error); 
    } 
} 

サービスクラスが正常に動作していると英雄は(ただここで問題をorgin CROS忘れる)にもUIにリストされている私のRESTサービスからJSONデータを取得するためにサービスクラスを設計しました。しかし、私がここで気づいたのは、http://localhost:8081//Myserver/rest/herosのブラウザから直接送信されたものです(開発者ツールのネットワークタブで見ることができます)。

私のアプリケーションによれば、ブラウザから送信すべきではなく、JSFのバックエンドBeanクラスのように処理し、関連するコンポーネントにデータを提供する必要があります。私はこれもCROS orginの問題を解決すると信じています。用量Angular2にはそのようなオプションがありますか?それを達成するための正しい方法を提案してください。

答えて

0

WebWorkerを使用して、コード実行をメインのUIスレッドから移動できます。 Angular2はそれを直接的にサポートしています(実験的)。

CORSに関して何かが変わるのではないかと疑います。 CORSを機能させるには、サーバーが正しいCORSヘッダーで応答する必要があります。

http://www.syntaxsuccess.com/viewarticle/web-workers-in-angular-2.0

+0

を参照してください - ウル迅速な対応のおかげでは、plsは私の質問を明確に。 –

+0

- 他のすべてのコンポーネントもWebWorkerで処理されますか? –

+0

私はあまりやったことはありませんが、AFAIK UIスレッドはレンダリングだけを実行し、他のすべてのコードはWebWorkerで実行されます。バインディングデータとイベントは、UIスレッドとWebWorkerスレッド間で渡されます(すべてが完全に透過的です)。 –

関連する問題