【发布时间】:2016-11-11 20:27:47
【问题描述】:
我是 只是在玩 Rxjs
这段代码有什么问题
我有一个错误
我的目标是设置“我的信息”
仅当按钮被点击两次时。
“MouseEvent”类型上不存在属性“length”。
//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>
更新1
我正在学习这门课程 课程.ultimateangular.com 和问题 发生在另一个 sn-p :(
更新2 遵循@martin 的提示 这似乎有效
let clicks = Observable.fromEvent<MouseEvent>(this.getNativeElement(this.btn), 'click')
.bufferCount(2, 1)
.map(e => 'ah Pippo')
.subscribe(msg => this.message = msg);
【问题讨论】:
-
(尝试
(<MouseEvent>ev)而不是ev。我想看看该类型是否正在输出。 -
@vitiral “MouseEvent”类型的参数不能分配给“(值:MouseEvent,索引:数字)=> 布尔”类型的参数。类型 'MouseEvent' 不匹配签名 '(value: MouseEvent, index: number): boolean'
-
看起来
ev实际上并不是一个事件——它是一个函数。否则,我不确定是什么问题,对不起! -
@Whisher 事件
MouseEvent确实没有属性length。顺便说一句,鼠标事件的长度是多少?见developer.mozilla.org/en/docs/Web/API/MouseEvent -
@martin 是的,你同意,但在第 4 版的这个例子中,有 jsfiddle.net/staltz/4gGgs/27 但我可能会误解,因为我现在可以看到之前有缓冲区。
标签: angular typescript rxjs rxjs5