Angular 5アプリを最新のCLIとAngular 6 RCに移行していますが、Observableのインポートがすべて壊れています。 Angular 6はインポートの動作を変更しますが、構文の動作に関する明確な参照は見つかりません。
私はこれを5で持っていて、うまくいきました:
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/throw';
今、新しい構文で私はそれを見る
import { Observable, Subject, throwError} from 'rxjs';
import { map } from 'rxjs/operators';
最初の2行はコンパイルされますが、たとえばcatchとthrowを取得する方法がわかりません。 .map()は、コードで使用されるとビルドエラーもスローします。
誰がこれがどのように機能するかについての参照を持っていますか?
rxjs 5.5 から、catch
は名前の衝突を避けるためにcatchError
関数に名前が変更されました。
Observableとは無関係に演算子を使用できるため、演算子名はJavaScriptキーワードの制限と競合することはできません。そのため、一部の演算子のパイプ可能なバージョンの名前が変更されました。
import { catchError } from 'rxjs/operators';
throw
には、ErrorObservable
を使用できます。
import { ErrorObservable } from 'rxjs/observable/ErrorObservable';
ErrorObservable.create(new Error("oops"));
rxjs 6
ErrorObservableの代わりに throwError を使用します。
import { throwError } from 'rxjs'
throwError(new Error("oops"));
また、オペレータを監視可能オブジェクトに直接チェーンするのではなく、パイプする必要があります
パイプは、今後のオペレーターに必要なものです。
バージョン:rxjs 6.0.1
例:
import { Observable } from "rxjs";
import { map } from "rxjs/operators";
Observable.create((observer: any) => {
observer.next('Hello')
}).pipe(map((val: any) => val.toUpperCase()))
.subscribe((x: any) => addItem(x))
function addItem(val: any) {
console.log('val', val);
}
//output - (In uppercase)
HELLO
または、バージョン6.0.0
を使い続けたい場合
npm i --save rxjs-compat
逆互換性を追加するには
ng update
の実行後にこれら2つのコマンドを実行します。これにより、rxjsインポートが修正されます。
参照:
同様の演算子をインポートするだけです
import { Observable } from 'rxjs';
import { map, catchError, timeout } from 'rxjs/operators';