2015-12-06 6 views
12

アルファ45とアルファ48の間でhttpに何らかの急激な変化があったのか誰かが知っていますか?私は周りを探索していたし、何も見つけられなかった。私の問題は、以下のコードがAlpha 45上で完全に動作していたことです。しかし、Alpha 48にアップグレードしたので、アプリケーションを実行しようとすると、_this.http.post(...).map is not a functionというエラーメッセージが表示されます。奇妙なことは、IntelliSenseは、http.postが観測可能オブジェクトを返すことを示しています。つまり、マップ関数を使用できるようにする必要があります。どんな助けもありがとう。ありがとう!地図2(地図)と他のRxJS関数を公開していない角2のHttpサービス

public Authenticate(username: string, password: string): Observable<boolean> { 

    this.ResetAuthenticationValues(); 

    return Observable.create((subscriber: EventEmitter<string>) => { 

     let body: string = 'grant_type=password&username=' + username + '&password=' + password; 
     let headers = new Headers(); 
     headers.append('Content-Type', 'application/x-www-form-urlencoded'); 

     this.http.post('http://example.com', body, {headers: headers}) 
      .map(res => res.json()) 
      .subscribe(
       (data: DataResponse) => { 
        if (!data.error) { 
         this.accessToken = {access_token: data.access_token, token_type: data.token_type}; 
         subscriber.next(this.isAuthenticated = true);      
        } 
        else 
         subscriber.error(this.isAuthenticated = false); 
       }, 
       (err) => subscriber.error(err), 
       () => subscriber.complete() 
      ); 

     return() => { }; 
    }); 
} 
+0

スティックアルファ47に彼らはRxJSとともにangular2を出荷する方法について何をすべきか(https://gitter.im/angular/angular?at=56636ef95057376520dbc193)[議論]されています。 –

答えて

31

別のアップデート(そのことについて申し訳ありません咳は、このオプションを忘れてしまった)

あなたが個別に演算子を追加しないようにしたい場合は、

import {Observable, Subject, ReplaySubject, etc...} from 'rxjs/Rx'; 
を行うことで、完全な受信をインポートすることができます

すべての演算子があります。

アップデートアルファアルファ49がリリースされた直後に50(2015年8月12日)

は、彼らがこのバージョンでは、あなたが

npm install [email protected] 
npm install [email protected] 
を行うことによって、良い行きますアルファ14にrxjsをアップグレードしたアルファ50をリリース

更新アルファ49(2015年8月12日)

リリースされた、これは、これが時間内に残ることを意味する、変化しなかった今alpha 49の通り。

System.config({ 
    paths: { 
     'rxjs/add/observable/*' : 'node_modules/rxjs/add/observable/*.js', 
     'rxjs/add/operator/*' : 'node_modules/rxjs/add/operator/*.js', 
     'rxjs/*' : 'node_modules/rxjs/*.js' 
    } 
}); 

import 'rxjs/add/operator/map'; 

このバージョンでは正確にalpha 13バージョンを必要とし、そうであれば、あなたのpackage.jsonに次のようにそれがあるべきように、元の答えは、まだいくつかの変更と有効で、パスは、rjxsに変更しましたすでに別のバージョンがある場合は、それを削除し、angular2をインストールしてからrjxsをインストールする必要があります。

更新

CHANGELOGこの破断変化を示すように更新されました。この件について多くを明確にしたcomment from @jeffbcrossissue #5642にあります。

そのコメントの一部を引用

モジュール性は最初から新しいRxJSプロジェクトの目標だった、そしてそれは我々が本当に演算子を構成する代わりに、階層型のディストリビューションに依存する真剣に開始することを最近までありませんでしたRxの

オリジナルの答えは、実際にRxJSとAngular2に関する互換性に影響する変更がありました。したがって、mapのような演算子を使用するには、それらを別々にインポートする必要があります。この変更はpull requestで確認できます。あなたの質問についてはすでにissueです。

アルファ47に固執することをお勧めします。しかし、プルリクエストで指定されているように、解決策が何であるかを知りたいと思っているすべての人に、オペレータを別々に追加してください。

あなたは(それ何度も繰り返すため申し訳ありません)オペレータを追加し、それを修正するために、この

import {Http, ...} ...; 

// Component 
constructor(http: Http) { 
    http.get(...).map() // 'map' doesn't exist! Ouch! 
} 

のようなものを持っているとrxjsするパスを設定する必要があります

これは、RxJSアルファ11またはアルファ12(と混同しないでください。@reactivex/rxjsと混同しないでください。ちょうどrxjsです)。あなたは、最新のをしたい場合、彼らlock itはあなたのSystem.configのパスを設定し、アルファ11

するが、そうとは限らない、これは私の設定であることに注意してください(、

npm install [email protected] 

それともnpm install rxjsでそれをインストール最善と私はあなたを想定していますが、あなたが設定を完了した後

を次のように、あなたがオペレーターをインポートすることができますアルファ11)

System.config({ 
    paths: { 
     'rxjs/observable/*' : 'node_modules/rxjs/observable/*.js', 
     'rxjs/operators/*' : 'node_modules/rxjs/operators/*.js', 
     'rxjs/*' : 'node_modules/rxjs/*.js' 
    } 
}); 

をインストール

import 'rxjs/operators/map'; 

これだけです。すべての演算子でそれを行う必要があります。だから私は繰り返すが、私はコメントにあなたに言ったように、アルファ47に固執することをお勧めします。私は後でplnkrで答えを更新しようとします。私は

System.config({ 
     packages: { 
      'app': {defaultExtension: 'js'}, 
      'node_modules': {defaultExtension: 'js'} 
     }, 
     paths: { 
      'rxjs/*' : 'node_modules/rxjs/*.js' 
     } 
    }); 

node_modulesdefaultExtensionを使用するために必要なことがわかった上で書かれているものものとは対照的に

+0

ありがとう、百万エリック!私は47にダウングレードして、これらのスレッドを監視しています。 ; 0) – Zorthgo

+0

私は今のところ結論は、我々はRxJSから演算子をインポートする必要がありますということであると思います。 Angular 2ライブラリからそれらをインポートする便利な方法はありません。 Ericのアップデートありがとう! ; 0) – Zorthgo

+0

あなたは大歓迎です。私は個人的にはこれが好きですが、それに慣れるのは単なる問題だと思います。 –

0

は、(私のための重要なシンクタンクだったrxjs/*パスが.jsを追加していない理由を私は知らないけどねえホ。)

これは、あなたが角度2のベータバージョンまたは将来の実際の生産のリリースを使用したい場合は、あなたがトンを行う必要があります48から最新の52

14

に動作しますこれを動作させるためのものがありますか?

1)あなたが最初RxJSへの参照含まれるようにindex.htmlの中であなたのSystem.config()の設定を更新する必要があります:あなたはmap()および他の(またはすべてをインポートすることができます)

System.config({ 
    map: { 
     'rxjs': 'node_modules/rxjs' 
    }, 
    packages: { 
     'app': {defaultExtension: 'js'}, // assumes your code sites in `src/app` 
     'rxjs': {defaultExtension: 'js'} 
    } 
}); 
System.import('app/app'); // this assumes your main file is `app.ts` and it sits in the `app` folder. 

2)あなたのメインファイル内import行(私の場合はapp.ts)を使用してアプリケーションにRxJS演算子を:

import 'rxjs/Rx'; // this would import all RxJS operators 

あなたはかなりのサイズを抑えるためにちょうどmap()をインポートする場合は、代わりにこれを行うだろう。

import 'rxjs/add/operator/map'; 

これらを各クラスファイルにインポートする必要があります。メインファイルにインポートして、他のすべてのコンポーネント/サービス/ディレクティブにアクセスできるようにします。

+4

受け入れ答えは、以前のバージョンのために有用であるかもしれませんが、これは、動作電流のソリューションです。 – froginvasion

+0

私はこれがベータ版で動作することを確認します。 –

5

あなたは

import 'rxjs/add/operator/map'; 

乾杯のようなコンポーネントでRxのマップ演算子をインポートする必要があります!

+0

すでに正しく答えられ受け入れられている質問にこの回答を追加する際のポイントは何ですか? –

+3

私はそれがロングショットで、ここでの大きな段落 – dheeran

+3

ベストの答えよりも十分に短いだと思いました!簡潔さを数えます! – battmanz

0

私はこの問題を抱えていました。これはrxjs-angular 2.0.0-rc4のバージョンで問題になっていました。rxjs-5.0.0-beta.6が必要です。私はjspm configにbeta.10を持っていました。