Angular2 rxjs过滤双击Property' length'在类型' MouseEvent'上不存在

时间:2016-11-11 20:27:47

标签: angular typescript rxjs rxjs5

我'米 只是玩Rxjs

这段代码有什么问题

我收到了错误

我的目标是设置“我的消息”

仅在单击按钮两次时才显示。

财产'长度'类型' MouseEvent'。

上不存在

// JS

import { Component, OnInit, ElementRef, ViewChild } from '@angular/core';
import {Observable} from 'rxjs/Observable';
import 'rxjs/add/observable/fromEvent';
import 'rxjs/add/operator/filter';
import 'rxjs/add/operator/map';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent  implements OnInit {
  message = 'Hello Rxjs';
  @ViewChild('btn') btn: ElementRef;
  ngOnInit(){
    let clicks = Observable.fromEvent<MouseEvent>(this.getNativeElement(this.btn), 'click')
    .filter(ev => ev.length >= 2)
    .map(e => 'My Message')
    .subscribe(msg => this.message = msg);
  }
  getNativeElement(element){
    return element.nativeElement;
  }
}

// HTML

<h1>
  <button #btn>Click</button>
  {{message}}
</h1>

UPDATE1

我正在学习这门课程 courses.ultimateangular.com 和问题 发生在其他代码段中:(

UPDATE2 跟随@martin的暗示 这似乎有效

let clicks = Observable.fromEvent<MouseEvent>(this.getNativeElement(this.btn), 'click')
    .bufferCount(2, 1)
    .map(e => 'ah Pippo')
    .subscribe(msg => this.message = msg);

1 个答案:

答案 0 :(得分:2)

如果您只想接受两个鼠标事件,然后完成使用take()运算符:

let clicks = Observable.fromEvent<MouseEvent>(this.getNativeElement(this.btn), 'click')
  .take(2)
  .map(e => 'My Message')
  .subscribe(msg => this.message = msg);