Angularのpipe()関数とは


107

パイプは、テンプレート内のデータ(形式)を変換するためのフィルターです。

pipe()以下のような機能に出会いました。pipe()この場合、この機能は正確にはどういう意味ですか?

return this.http.get<Hero>(url)
  .pipe(
    tap(_ => this.log(`fetched hero id=${id}`)),
    catchError(this.handleError<Hero>(`getHero id=${id}`))
);


3
@Ajay私はこのページとたくさんの参照を取得します| 使用します。これはrxjsパイプが何であるか答えません。
182764125216

回答:


122

AngularとRxJSの概念と混同しないでください

Angularにはパイプの概念がありpipe()、RxJSには関数があります。

1)Angularのパイプ:パイプはデータを入力として受け取り、それを目的の出力に変換します
https://angular.io/guide/pipes

2)pipe()RxJSの関数:パイプを使用して演算子をリンクできます。パイプを使用すると、複数の関数を1つの関数に結合できます。

pipe()関数は、引数として、あなたが結合したい機能を取り、そして、実行されると、シーケンス内の構成機能を実行し、新しい機能を返します。
https://angular.io/guide/rx-library(このURLでパイプを検索すると、同じものが見つかります)

だからあなたの質問によれば、あなたはpipe()RxJSの機能を参照しています


43

最初の説明で話しているパイプは、例で示したパイプとは異なります。

Angular(2 | 4 | 5)では、パイプはあなたが言ったようにビューをフォーマットするために使用されます。あなたはAngularのパイプの基本を理解していると思います、このリンクから詳細について学ぶことができます-Angular Pipe Doc

pipe()あなたが例に示されているが、あるpipe()方法RxJS 5.5(RxJSは、すべての角のアプリケーションのデフォルトです)。Angular5全てRxJSのオペレータは、単一のインポートを使用してインポートすることができ、それらは現在、パイプ法を用いて合成されます。

tap()-RxJSタップオペレーターは、Observable値を調べ、その値を使用して何かを行います。つまり、API要求が成功した後、tap()オペレーターは応答で実行する必要のあるすべての機能を実行します。この例では、その文字列のみをログに記録します。

catchError()-catchErrorはまったく同じことを行いますが、エラー応答を伴います。エラーをスローしたい場合、またはエラーが発生した場合に関数を呼び出したい場合は、ここで実行できます。例では、それが呼び出されhandleError()、その中で、その文字列をログに記録します。


「最初の説明で話しているパイプ...」->いいえ、違いはありません。; 私の意見では、彼の質問は完全に明確でした(これまで考えられていた混乱はありませんでした)。「パイプ」と呼ぶことができるプログラミングには多くの概念がありますが、彼の説明では非常に具体的であり、それらを「パイプ関数」と呼ぶことで、起こり得る混乱をすべて排除しました。私は彼が他にどのように彼らを呼んだのか知りませんでした。
bvdb

1
「パイプは、テンプレート内のデータ(形式)を変換するためのフィルターです。」ここで彼は(正確に彼は、テンプレート内すなわち形式のデータと何がある)、日付のように、角度2+でパイプの周りの角で提供大文字のパイプを話していたと説明して彼はRXJSパイプの一例が示されている機能を。ですから、そういう2つのことはまったく異なります。
BhargavG

私はそれを取り戻します。そのフレーズを見落とした。-1を元に戻せるといいのですが。:(しかし、それは残念ながらロックされている。
bvdb

それは大したことではありません。それがすべての疑いをクリアしたことを嬉しく思います。乾杯:-)
BhargavG

15

RxJSオペレーターは、コレクションの高度な操作を可能にするためにオブザーバブル基盤に構築される関数です。

例えば、RxJSのようなオペレータ定義map()filter()concat()、およびをflatMap()

パイプを使用して、演算子をリンクできます。パイプを使用すると、複数の関数を1つの関数に結合できます。

pipe()関数は、引数として、あなたが結合したい機能を取り、そして、実行されると、シーケンス内の構成機能を実行し、新しい機能を返します。


例はありますか?
lofihelsinki 2018

以下の例では、フィルターとマップ関数をパイプ処理しています。これで、例に示すように、両方の関数が順次実行されます。最初に結果をフィルタリングし、次に結果をマッピングします。それがお役に立てば幸いです。'rxjs / operators'から{filter、map}をインポートします。const squareOdd = of(1、2、3、4、5).pipe(filter(n => n%2!== 0)、map(n => n * n)); //値を取得するためにサブスクライブしますsquareOdd.subscribe(x => console.log(x));
manoj 2018

本当に素晴らしい答えですが、残念ながら投票数が非常に少ないのは残念です。私からの+1。
Ashok kumar

7

ReactiveXの公式ドキュメントを確認する必要があります:https : //github.com/ReactiveX/rxjs/blob/master/doc/pipeable-operators.md

これは、RxJSのパイプ処理に関する優れた記事です:https ://blog.hackages.io/rxjs-5-5-piping-all-the-things-9d469d1b3f44 。

要するに.pipe()は複数のパイプ可能な演算子をチェーンすることを可能にします。

バージョン5.5から、RxJSは「パイプ可能な演算子」を出荷し、一部の演算子の名前を変更しました:

do -> tap
catch -> catchError
switch -> switchAll
finally -> finalize

6

2つの非常に異なるタイプのパイプAngular-PipesRxJS-Pipes

角パイプ

パイプはデータを入力として受け取り、それを目的の出力に変換します。このページでは、パイプを使用してコンポーネントの誕生日プロパティを人にわかりやすい日付に変換します。

import { Component } from '@angular/core';

@Component({
  selector: 'app-hero-birthday',
  template: `<p>The hero's birthday is {{ birthday | date }}</p>`
})
export class HeroBirthdayComponent {
  birthday = new Date(1988, 3, 15); // April 15, 1988
}

RxJS-パイプ

監視可能な演算子は、パイプ可能演算子と呼ばれるパイプ方法を使用して構成されます。例を示します。

import {Observable, range} from 'rxjs';
import {map, filter} from 'rxjs/operators';

const source$: Observable<number> = range(0, 10);

source$.pipe(
    map(x => x * 2),
    filter(x => x % 3 === 0)
).subscribe(x => console.log(x));

コンソールでのこの出力は次のようになります。

0

6

12

18

オブザーバブルを保持する変数の場合、.pipe()メソッドを使用して、オブザーバブルコレクションの各項目を処理および変換できる1つまたは複数の演算子関数を渡すことができます。

したがって、この例では、0〜10の範囲の各数値を取り、2を乗算します。次に、フィルター関数を使用して、奇数のみに結果をフィルター処理します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.