angular5 - 从 RxJS5 升级到 RxJS6
问题描述
我在从 RxJS5 升级到版本 6 时遇到问题。我有以下代码:
private captureEvents(canvasEl: HTMLCanvasElement) {
Observable
.fromEvent(canvasEl, 'mousedown')
.switchMap((e) => {
return Observable
.fromEvent(canvasEl, 'mousemove')
.takeUntil(Observable.fromEvent(canvasEl, 'mouseup'))
.pairwise()
})
.subscribe((res: [MouseEvent, MouseEvent]) => {
const rect = canvasEl.getBoundingClientRect();
const prevPos = {
x: res[0].clientX - rect.left,
y: res[0].clientY - rect.top
};
const currentPos = {
x: res[1].clientX - rect.left,
y: res[1].clientY - rect.top
};
this.drawOnCanvas(prevPos, currentPos);
});
}
但是当我升级到 RxJS6 时,我收到以下错误:
“typeof Observable”类型上不存在属性“fromEvent”。
我试图从这个(RxJS5)改变我的进口:
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/fromEvent';
import 'rxjs/add/operator/takeUntil';
import 'rxjs/add/operator/pairwise';
import 'rxjs/add/operator/switchMap';
对此(RxJS6):
import { Observable, fromEvent } from 'rxjs';
import { switchMap, takeUntil, pairwise } from 'rxjs/operators';
这是我升级代码的最佳尝试:
private captureEvents(canvasEl: HTMLCanvasElement) {
const obsMouseDown = fromEvent(canvasEl, 'mousedown').pipe(
switchMap((e) => {
const obsMouseMove = fromEvent(canvasEl, 'mousemove').pipe(
takeUntil(a => {
const obsMouseUp = fromEvent(canvasEl, 'mouseup').pipe(
pairwise()
);
return obsMouseUp;
}));
return obsMouseMove;
}))
.subscribe((res: [MouseEvent, MouseEvent]) => {
const rect = canvasEl.getBoundingClientRect();
const prevPos = {
x: res[0].clientX - rect.left,
y: res[0].clientY - rect.top
};
const currentPos = {
x: res[1].clientX - rect.left,
y: res[1].clientY - rect.top
};
this.drawOnCanvas(prevPos, currentPos);
});
}
但这不起作用 - 我收到“takeUntil”代码错误:
'(a: any) => Observable<[Event, Event]>' 类型的参数不能分配给'Observable' 类型的参数
plnkr 原始代码示例:
https ://embed.plnkr.co/QSvJxi/
解决方案
fromEvent
Now 已经是 Observable 类型了。您不需要将它链接到 Observebal,而是可以直接调用它并将其影响到变量或更好的 const。如下所示:
const source = fromEvent(document, 'click');
至于导入,你想对了
import { fromEvent } from 'rxjs';
推荐阅读
- css - 如何应用显示:无;到 div 中的一个类
- angular - Angular 7导航强行返回根目录
- powershell - 在 Powershell 中,有没有办法确保 #Requires -Modules 始终加载最新的更改?
- jquery - 根据 SVG 路径位置设置元素的位置
- java - 如何修复 java lang.ClassNotFoundException: org.apache.tools.ant.taskdefs.Execute
- azure-devops - 发布后将文件从 azure 文件存储复制到 azure 网站
- c# - 如何从列表属性对象分配给十进制列表和字符串列表并比较十进制
- javascript - Raycaster / Touch 没有在带有 THREE.DragControls 的移动设备上注册
- sql-server - 尽管使用了数据转换和准确的目标数据类型,但 SSIS 数据转换错误
- graph - 多个 Web 应用程序注册在 AAD 中不起作用