2016-11-05 11 views
1

以下は、RxJS "スロットル"演算子を使用しようとしている私のコンポーネントコードです。角2のRxJS "スロットル"演算子の使用方法

import { Component , OnInit , OnChanges , DoCheck } from '@angular/core'; 
import { Observable } from 'rxjs/Observable'; 
import 'rxjs/add/operator/map'; 
import 'rxjs/add/observable/fromEvent'; 
import 'rxjs/add/operator/throttle'; 

@Component({ 
    selector:'rx1', 
    template: ` 
    <h2> Rx1 Component </h2> 
    <button name="btn" valur="click"> 
}) 

export class Rx1Component implements OnInit { 

    ngOnInit() { 
     var button = document.getElementsByTagName('button'); 

     Observable.fromEvent(button, 'click') 
      .throttle(1000) 
      .subscribe(() => console.log('clicked....')); 
    } 
} 

この簡単なサンプルの目的は、クリック間に1秒の最小間隔がある場合にのみ、「クリック...」を印刷することです。

このコードをコンパイルすると、以下のエラーが表示され、 ".throttle(1000)"という行が表示されます。

'number'型の引数は、 '(値:{})=> SubscribableOrPromise'型のパラメータに割り当てられません。

私がやっている間違いは何ですか?

+2

さて、スロットルのドキュメントを見てください。それは引数としての継続時間を期待していません:http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-throttle。おそらくthrottleTimeが必要です:http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-throttleTime –

+0

どのバージョンのrxjsタイプスクリプト宣言を使用していますか?あなたのコードは私にとってうまく見えます。それは宣言ファイルが悪いと私に信じさせます。ここでもtypescript宣言ファイルからのスロットル宣言をペーストできますか? –

+0

@JB Nizet throttleTimeが機能しました。 – refactor

答えて

3

他の人が示唆しているように、throttle()は、持続時間ではなく、Observableを引数としてとります。しかし、あなたが言うものは、debounceTime()オペレータの場合にはさらに適しています。言及する価値

ことの一つは、あなたがAngular2を使用しているので、あなたは常にRxJS 5はなく、古いRxJS 4を使用してしているということです私はあなたがthrottleここhttps://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/throttle.mdまたはhttp://reactivex.io/documentation/operators/debounce.htmlを見つけたと思いますが、これらは両方ともRxJS 4を説明します。

RxJS 5の正しいドキュメントは、です。ご覧のとおり、throttle()throttleTime()があります。

関連する問題