Angular 2 RxJS检查鼠标事件在延迟后是否仍然活动

2023-12-27

我正在使用 Angular 2 来制定指令。我将以下事件绑定到主机组件:

host: {
    '(mouseenter)': 'onMouseEnter($event)',
    '(mouseleave)': 'onMouseLeave($event)'
}

我还在指令上创建了两个流和侦听器来管理这两个事件

export class PopupDirective {
    private _mouseEnterStream: EventEmitter<any> = new EventEmitter();
    private _mouseLeaveStream: EventEmitter<any> = new EventEmitter();

    onMouseEnter($event) {
         this._mouseEnterStream.emit($event);
    }

    onMouseLeave($event) {
         this._mouseLeaveStream.emit($event);
    }
}

我想要我的subscribe仅当以下情况时才被调用mouseenter事件在固定延迟后仍然有效(即mouseleave没有发生)。我尝试这样做,但它不起作用(这是有道理的,我只是不知道如何解决它)。

this._mouseEnterStream.flatMap((e) => {
  return Observable
    .of(e)
    .takeUntil(this._mouseLeaveStream);
}).delay(2000).subscribe(
  () => console.log('yay, it worked!')
);

有 Angular 2 / RxJS 经验的人知道我应该如何处理这个问题吗?


Günter 的答案正是您所期望的,但您应该使用of运算符而不是return一个不存在的。

this._mouseEnterStream.flatMap((e) => {
  console.log('_mouseEnterStream.flatMap');
  return Observable
      .of(e)
      .delay(2000)
      .takeUntil(this._mouseLeaveStream);
}).subscribe(
  (e) => {
    console.log('yay, it worked!');
    console.log(e);
  }
);

查看相应的plunker:https://plnkr.co/edit/vP3xRDXxFanqzLEKd3eo?p=preview https://plnkr.co/edit/vP3xRDXxFanqzLEKd3eo?p=preview.

另外,还有Angular 中的提案 https://github.com/angular/angular/issues/13248旨在简化使用 Rx 通过模板语法从 DOM 事件创建可观察对象的方式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular 2 RxJS检查鼠标事件在延迟后是否仍然活动 的相关文章

随机推荐

  • 如何按月对项目进行汇总和求和?

    我有 2 个数据框 订单和带有价格的商品 orders pd DataFrame id 1 2 sum delivery 10 0 date 2016 01 01 2016 01 05 items pd DataFrame id 1 2 3
  • 将 Netbeans 与 Cygwin 和 SDL(包括 SDL.h)一起使用会产生奇怪的错误

    我已经设置了 Netbeans C C 安装 配置并正确运行了 Cygwin SDL 是使用 Cygwin 终端从源安装的 我已经确认 Cygwin Netbeans 和 SDL 都运行正确 我可以使用 Netbeans 编写和编译 C 项
  • 无法释放视图控制器/导致 EXC_BAD_ACCESS

    我认为这很奇怪 但相同的代码在其他应用程序中对我来说工作得很好所以 我重写了 iphone 应用程序委托中的函数 它继承了主委托的超级类 appdelegate iPhone h interface AppDelegate iPhone A
  • Automator:如何使用“从列表中选择”操作?

    我正在尝试使用 Automator 创建一个服务 该服务只需调用 textutil Convert 即可 最终 我希望能够右键单击 docx 文件并将其转换为文本 rtf html 等 右键单击后 我想要一个非常简单的弹出窗口 询问所需的格
  • 如何正确使用通过Firebase身份验证获得的Facebook令牌?

    当某人想要通过 Facebook 注册时 我试图获取该人的名字和姓氏 但想知道是否存在一些安全问题 基于来自 Firebase 的文档 https firebase google com docs auth web facebook log
  • 如何创建文件并将其保存到“文件”应用程序(iOS 平台)

    我需要创建 PDF 文件 完成 并将其保存到文件应用程序 以便用户可以随时在我的应用程序之外访问它 我试过rn fetch blob and react native fs包 它们在 Android 上运行良好 但对于 iOS 它们只能创建
  • 如何使用 winmm.dll 确定歌曲的长度?

    I ve P 从 WinMM dll 调用 mciSendString 方法 http www pinvoke net default aspx winmm mciSendString DllImport winmm dll private
  • 格式化文件路径

    我是 Python 新手 所以我的做法可能完全错误 但我在获取和更改文件目录时遇到问题 我的脚本接受可以位于任何目录中的多个文件名 在我的脚本中 我需要 python 更改到文件的目录 然后执行一些操作 但是 我在更改目录时遇到问题 这是我
  • 使用 Rstudio 实时预览 Rmarkdown 文档

    我一直使用 VScode 作为主要的记笔记平台 并且我已经非常习惯实时预览功能 现在我必须使用 Rmarkdown 生成可更新的报告 我想知道是否有人知道如何使用 Rstudio 生成实时预览 我对有关 R 和 Rmarkdown 的 Vs
  • 如何使用AWS Cognito作为单点登录?

    我有 2 个网站 用户注册 登录和其他内容 将在 认知用户池 用户个人资料 自我保健 两个站点位于不同的域中 如何在两个站点之间实施 SSO 是的 您可以通过以下方式进行操作 登录在第一个站点上完成 您将获得一个令牌 在第二个站点上使用此令
  • OAuth2FeignRequestInterceptor 的替代方案,因为它现已弃用

    在我之前的实现中 我使用的是 OAuth2FeignRequestInterceptor 但从 Spring security 5 开始 OAuth2FeignRequestInterceptor 似乎已被弃用 有什么替代方法可以达到同样的
  • 尝试在 Eclipse 中创建新项目时出现“构建路径条目丢失”错误

    缺少构建路径条目 org eclipse jdt launching JRE CONTAINER org eclipse jdt internal debug ui launcher StandardVMType JavaSE 1 7 当我
  • 如何使用 SwiftUI DocumentGroup 读取大文件而不制作临时副本?

    我制作了一个 SwiftUI DocumentApp 它可以读取大型媒体文件 但不需要写入它们 在我的文档中 我只想存储文件的 URL 以便我可以使用例如加载它 AVAudioFile 如果不像作者那样创建文件的临时副本 我无法弄清楚如何执
  • 确定mysql中列允许的最大长度

    表的结构如下 registrant id varchar 16 registrant name varchar 128 我想运行一个查询来显示与最大允许长度匹配的所有条目 即我当前对上述内容所做的操作 SELECT FROM tm regi
  • localeCompare 进行自然排序?

    我正在开发一个漫画书阅读器 我有一些用户上传的文件 图像 文件对象 我正在使用它们的文件名以便按正确的顺序对它们进行排序 我尝试使用localeCompare对它们进行自然排序 但没有运气 页面应按以下方式排序 page1 page2 pa
  • 水晶报表无法运行 Azure Web 应用程序

    我们在 ASP NET 应用程序中使用水晶报表 https kegxchange azurewebsites net https kegxchange azurewebsites net 然而 当我们发布应用程序时 我们收到错误 无法加载文
  • 如何回收Java线程堆栈使用的内存?

    我已经遇到这个内存泄漏问题好几天了 我想我现在有了一些线索 我的记忆java进程不断增长 但堆却没有增加 有人告诉我 如果我创建许多线程 这是可能的 因为 Java 线程使用堆之外的内存 我的java进程是一个服务器类型程序 所以有1000
  • 哪个是 Rails 应用程序的最佳数据库?

    我正在开发一个 Rails 应用程序 它将访问大量 RSS 提要或抓取数据站点 主要是新闻 它将类似于 Google 新闻 但采用不同的方法 因此我将存储大量新闻 或新闻摘要 将它们分类为不同的类别 并使用排名和推荐技术 我应该选择 MyS
  • Angular HttpClient 结合管道、点击和订阅?

    我正在尝试使用 Angular 中的 HttpClient 检索一些数据 我的代码如下所示 getData suffurl string id number Observable
  • Angular 2 RxJS检查鼠标事件在延迟后是否仍然活动

    我正在使用 Angular 2 来制定指令 我将以下事件绑定到主机组件 host mouseenter onMouseEnter event mouseleave onMouseLeave event 我还在指令上创建了两个流和侦听器来管理