Je suis juste jouer avec Rxjs
quel est le problème avec ce code
J'ai une erreur
mon objectif est de définir le "Mon message"
seulement lorsque le bouton est cliqué deux fois.
La propriété "longueur" n'existe pas sur le type "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
Je suis ce cours courses.ultimateangular.com et le problème se passe avec l'autre extrait :(
UPDATE2 suite au soupçon de @martin cela semble fonctionner
let clicks = Observable.fromEvent<MouseEvent>(this.getNativeElement(this.btn), "click")
.bufferCount(2, 1)
.map(e => "ah Pippo")
.subscribe(msg => this.message = msg);
Réponses:
2 pour la réponse № 1Si vous voulez n'accepter que deux événements de souris et terminer l'utilisation, take()
opérateur:
let clicks = Observable.fromEvent<MouseEvent>(this.getNativeElement(this.btn), "click")
.take(2)
.map(e => "My Message")
.subscribe(msg => this.message = msg);