javascript - CodeMirror:onChanges - 如何检测更改是什么?
问题描述
我有一个应用程序,允许用户输入 CodeMirror 文本框。
我使用SignalR连接到服务器,并在更改事件时推送文本框的全文。
问题是每次用户键入一个字母时,更改都会被推送到服务器。我设法用这样的语句
过滤掉空白和换行:if
editorChanges(doc, changes: any[]) {
if (changes[0].text.some(str => str)) {
this.signalrHub.push(this.editor.value());
}
}
我认为我需要的是使用RxJs的解决方案。
我并不熟悉 RxJs。
有没有人有这方面的经验?
以前有人做过这种事情吗?
解决方案
您可以使用fromEvent
、map
和运算符debounceTime
的组合distinctUntilChanged
。
import { of, fromEvent } from 'rxjs';
import { map, debounceTime, distinctUntilChanged } from 'rxjs/operators';
let codeTextBox = document.getElementById('codetextbox');
let sourceStream$ = fromEvent(codeTextBox, 'input')
.pipe(
map((x: any) => x.target.value),
debounceTime(300),
distinctUntilChanged()
);
cont mysubscription = sourceStream$.subscribe(x=>{
console.log(x) //<-- this is the latest text in the textbox
});
//mysubscription.unsubscribe(); <-- add this line when your view is getting destroyed
另外,请注意不要subscribe
多次。理想情况下subscribe
,当文本框在 DOM 中可用时,应该只发生一次。并且不要忘记unsubscribe
否则你会有内存泄漏。
推荐阅读
- python - 如何在python中将特殊格式导入为字典?
- azure-active-directory - 授予服务主体访问其他租户中的应用程序的权限
- python - 将字典存储在文件中并部分加载的最佳方法?
- c - 尝试在 C 中读取 txt 文件时出现分段错误(核心转储)
- xamarin.forms - 带有 XF 的 ReactiveUI:如何为自定义控件创建命令绑定器?
- node.js - NodeJS 真的是单线程还是多线程?
- c# - 通过“hasReceipt”验证购买
- php - 创建代理并每 60 秒运行一次。在 bitrix24
- java - 使用链式操作快速降低流吞吐量?
- ios - 原始 CIFilter 的 outputImage 为零