[解決済み] rxjsからObservableをインポートする最良の方法
質問
私のアンギュラー2アプリでは、サービスにおいて
Observable
クラスから
rxjs
クラスを作成します。
import { Observable } from 'rxjs';
今のところ、私はただ
Observable
を使うようにしています。
toPromise()
関数を使用することができます。
どこかのStackOverflowの別の質問で読んだのですが、この方法でインポートして、さらに
rxjs/Rx
から不必要なものを大量にインポートしてしまうということを読みました。
rxjs
ライブラリから不必要なものを大量に取り込み、ページのロード時間やコードベースを増加させます。
私の質問は、インポートするための最良の方法は何かということです。
Observable
を使用できるように
toPromise()
を使うことができるのでしょうか?
どのように解決するには?
Rxjs v 6.*.
rxjsの新しいバージョンで簡素化されました。
1) 演算子
import {map} from 'rxjs/operators';
2) その他
import {Observable,of, from } from 'rxjs';
チェーン接続の代わりに、パイプ接続が必要です。例えば
古い構文です。
source.map().switchMap().subscribe()
新しい構文です。
source.pipe(map(), switchMap()).subscribe()
注意 いくつかの演算子は、JavaScriptの予約語と名前の衝突があるため、名前が変更されています! これらは以下の通りです。
do
->
tap
,
catch
->
catchError
switch
->
switchAll
finally
->
finalize
Rxjs v 5.* のリリース。
私は演算子をインポートする必要があるたびにドキュメントをチェックし続けるので、私は自分自身を助けるために部分的にこの答えを書いています。何かがより良い方法で行うことができる場合、私に知らせてください。
1)
import { Rx } from 'rxjs/Rx'
;
これはライブラリ全体をインポートします。そうすれば、各オペレータの読み込みを気にする必要はありません。しかし、Rxを追加する必要があります。 ツリーシェイクで必要な関数だけを選んで最適化できればいいのですが(要検証) コメントにもあるように、tree-shakingではどうしようもない。つまり、これは最適化された方法ではないのです。
public cache = new Rx.BehaviorSubject('');
または、インポートすることができます 個々の 演算子を使うこともできます。
これは、これらのファイルのみを使用するようにアプリを最適化します。 :
2)
import { _______ } from 'rxjs/_________';
この構文は通常、以下のようなメインオブジェクトに使用されます。
Rx
そのもの、あるいは
Observable
など。
この構文で取り込むことができるキーワード
Observable, Observer, BehaviorSubject, Subject, ReplaySubject
3)
import 'rxjs/add/observable/__________';
Angular 5 のための更新
rxjs 5.5.2+を使用するAngular 5で
import { empty } from 'rxjs/observable/empty';
import { concat} from 'rxjs/observable/concat';
これらは通常、Observableを直接伴います。例えば
Observable.from()
Observable.of()
その他、この構文でインポートできるキーワードは以下の通りです。
concat, defer, empty, forkJoin, from, fromPromise, if, interval, merge, of,
range, throw, timer, using, zip
4)
import 'rxjs/add/operator/_________';
Angular 5 のための更新
rxjs 5.5.2+を使用するAngular 5で
import { filter } from 'rxjs/operators/filter';
import { map } from 'rxjs/operators/map';
これらは通常、Observableが作成された後にストリームでやってきます。例えば
flatMap
のようになります。
Observable.of([1,2,3,4])
.flatMap(arr => Observable.from(arr));
その他、このような構文によるキーワードがあります。
audit, buffer, catch, combineAll, combineLatest, concat, count, debounce, delay,
distinct, do, every, expand, filter, finally, find , first, groupBy,
ignoreElements, isEmpty, last, let, map, max, merge, mergeMap, min, pluck,
publish, race, reduce, repeat, scan, skip, startWith, switch, switchMap, take,
takeUntil, throttle, timeout, toArray, toPromise, withLatestFrom, zip
フラットマップ
:
flatMap
のエイリアスです。
mergeMap
をインポートする必要があります。
mergeMap
を使うために
flatMap
.
のメモ
/add
輸入品
:
インポートはプロジェクト全体で一度だけ行う必要があります。そのため、一箇所で行うことをお勧めします。複数のファイルに含まれていて、そのうちの1つを削除すると、間違った理由でビルドが失敗します。
関連
-
[解決済み] BehaviorSubjectとObservableの違い?
-
[解決済み] Angular/RxJS `Subscription` からいつ退会すればいいのか?
-
[解決済み] Angular 2におけるEventEmitter.next()とEventEmitter.emit()の相違点
-
[解決済み] ng serve がファイルの変更を自動的に検出しない
-
[解決済み] Angular 4+ ngOnDestroy() サービス中 - observableを破壊する
-
[解決済み] Angularで、コントロールが作成された後、FormControlにバリデータを追加する方法は?
-
[解決済み] AngularでFormArrayからすべての項目を削除する
-
[解決済み] FormGroupから単一の値を取得する方法
-
[解決済み] angular keyvalue pipe sort properties / iterate in order (アンギュラーキーバリューパイプソートプロパティ / イテレートオーダー)
-
[解決済み] の@ViewChildのreadパラメータは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] angular-cliのビルドでカスタムファイルをインクルードするには?
-
[解決済み] 角度2 ngfor 最初、最後、インデックスループ
-
[解決済み] Angular CLIで特定のバージョンのAngularをインストールするには?
-
[解決済み] 文字列|ヌル'型の引数は、文字列'型のパラメータに代入できません。タイプ 'null' はタイプ 'string' に割り当てられません。
-
[解決済み] Karma/Jasmineのテストで「[object ErrorEvent] thrown」エラーが発生した場合、どのようにデバッグすればよいですか?
-
[解決済み] Angular2のテーブル行をコンポーネント化
-
[解決済み] 角度の2つのスイッチケース値
-
[解決済み] Angularで確認ダイアログを作る簡単な方法?
-
[解決済み] Angular2で生のhtmlをバインドする方法 [重複]。
-
[解決済み] Angular2 *ngIf テンプレート内のオブジェクト配列の長さをチェックする