データを取得するためにサービスを呼び出すAngular 4 Componentがあります。最も奇妙な状況ではありません。私はデータを取得し、それを変換し、それをフィルタリングする必要があります。明らかに、これを行う方法は、パイプを使用することです。私のサービスでRxjsパイプがangular's Http.get()で動作しない
ngOnInit(): void {
this.suService.getShippingUnitTypes().subscribe(res => {
console.log("Getting shipping unit types: ", res);
});
}
:私のコンポーネントで
import { Injectable } from '@angular/core';
import { Http, Response, RequestOptions, Headers, RequestMethod } from '@angular/http';
import { Observable, pipe } from 'rxjs/Rx';
import { map, filter } from 'rxjs/operators';
デバッグ、コードは決して誤りが得ない単にんが、ときに:
getShippingUnitTypes(): any {
const convertToJson = map(value => (value as any).json().XXETA_GRID_STATIC_LOV);
const filterShippingUnit = filter(value => (value as any).LOV_TYPE == "SHIPPING_UNIT");
return this.http.get(
this.constantsService.LOOKUP_COLUMN_BATCH_URL
).pipe(convertToJson, filterShippingUnit);
}
サービスは、次のインポートコンポーネントのconsole.log()ステートメントに追加します。 .pipe()を削除してObservableを返すだけで、変換とフィルタリングがなくても期待できるコードがログに記録されます。
私はRxjsとPipeを使うのがとても新しいです。私は明らかに何かを理解していない。
編集した情報を追加するには:
私は、このような...
pipe(tap(console.log), convertToJson, tap(console.log), filterShippingUnit, tap(console.log))
のようにパイプを活用入れ私はタップが存在することを知りませんでしたが、それは便利です。最初の2つのコンソールログは、私が期待するものを私に与えます。 3番目のフィルタは、filterShippingUnitの直後には何もしません。それはまったく値を記録しません。 nullでもない。
convertToJson console.logの後に28個のオブジェクトの配列が吐き出されます。オブジェクトの1つは
{LOV_TYPE: "SHIPPING_UNIT", LOV_TAB_TYP_ITEM: Array(4)}
です。filterShippingUnitフィルタに基づいてそのオブジェクトを渡すことが期待されます。
(値は任意).jsonそれをやって? –
応答がフィルタにかけられないのは確かですか? 'tap 'を使ってチェーン' .pipe(tap(console.log)、convertToJson、tap(console.log)、filterShippingUnit); ' – martin
のチェーン内で何が起こっているのかを見ることができます。と呼ばれる。 – Joe