如何在angular2中使用'Rx Observable'来解决双击问题

时间:2017-06-23 10:52:30

标签: javascript angular typescript buffer rxjs

let button = document.querySelector('.mbtn');
let lab = document.querySelector('.mlab');

let clickStream = Observable.fromEvent(button,'click');

let doubleClickStream = clickStream 
        .buffer(()=> clickStream.throttle(250))
        .map(arr => arr.length)
        .filter(len => len === 2); 

doubleClickStream.subscribe(event =>{
        lab.textContent = 'double click';
}); 

    doubleClickStream.throttle(1000)
        .subscribe(suggestion =>{
            lab.textContent = '-';
        });

但这是我的angular2项目中的错误,谁可以帮我解决它, 这是错误日志↓

  

错误   /Users/genilex3/Desktop/meager/angularRxjs/angularrxjs/src/app/app.component.ts   (58,15):类型的参数'()=>任何'不能分配给参数   类型'可观察'。物业' _isScalar'在类型中缺失   '()=>任何'

     

错误   /Users/genilex3/Desktop/meager/angularRxjs/angularrxjs/src/app/app.component.ts   (58,41):类型'类型的参数'不能分配给参数   type'(value:{})=> SubscribableOrPromise'

1 个答案:

答案 0 :(得分:2)

您应该使用bufferTime作为您的信息流。

let doubleClickStream = clickStream 
      .bufferTime(250)
      .map(arr => arr.length)
      .filter(len => len === 2);

您可以在这里阅读更多内容:http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-bufferTime

如果要在设置1000ms后清除值,则应使用debounceTime方法。

doubleClickStream.debounceTime(1000)
    .subscribe(suggestion =>{
        lab.textContent = '-';
    });

您可以在此处详细了解debounceTimehttp://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-debounceTime