码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Angular使用指令配合RXJS使用节流throttle


    • 节流: n 秒内只运行一次,若在 n 秒内重复触发,只有一次生效 throttle
    • 防抖: n 秒后在执行该事件,若在 n 秒内被重复触发,则重新计时 debounce

    之前说起节流防抖,都是在事件内部用RXJS处理的(最开始写的是原生,设定计时器和开关)。后来看到别人把节流防抖放在 Angular 指令 Directives里,并且使用@output装饰器触发元素的指定事件。

    太妙了。

    1. import { Directive, EventEmitter, HostListener, OnInit, Output, OnDestroy } from '@angular/core';
    2. import { Subject, Subscription } from 'rxjs';
    3. import { throttleTime } from 'rxjs/operators';
    4. /**
    5. * 点击节流器:避免连续点击
    6. */
    7. @Directive({
    8. selector: '[directive-throttle]'
    9. })
    10. export class ThrottleClickDirective implements OnInit, OnDestroy {
    11. // 一定的时间内只执行第一个事件
    12. private THROTTLE_TIME: number = 500;
    13. private subject = new Subject<MouseEvent>();
    14. private click: Subscription;
    15. // 事件方法
    16. @Output() throttleClick = new EventEmitter();
    17. constructor() { }
    18. ngOnInit(): void {
    19. const result = this.subject.pipe(
    20. throttleTime(this.THROTTLE_TIME)
    21. );
    22. this.click = result.subscribe(e => {
    23. this.throttleClick.emit(e)
    24. })
    25. }
    26. ngOnDestroy() {
    27. this.click.unsubscribe();
    28. }
    29. @HostListener('click', ['$event'])
    30. onClick(evt: MouseEvent) {
    31. this.subject.next(evt);
    32. }
    33. }

    代码不多,但是涉及到的知识点很多。

    1. RXJS subject

    RxJS 核心概念之Subject_Alex__Gong的博客-CSDN博客本文出处:https://segmentfault.com/a/1190000005069851,我做了一部分修改我们在接触到RxJS的时候,不免会有点晕头转向的感觉,对于什么是Subject,什么是Observer,什么是Observable,总感觉晕乎乎的。下面我引用一篇为自认为比较通俗易懂的博文,再加上自己的描述来给大家解释下,弄明白之后对于学习Angular2+有很大的帮助,因为在https://blog.csdn.net/GongZhongNian/article/details/787387562. RXJS throttle

    使用rxjs以及javascript解决前端的防抖和节流,以及防抖在vue中的用法_榴莲不好吃的博客-CSDN博客_rxjs 节流JavaScript实现方式:防抖触发高频事件后 n 秒内函数只会执行一次,如果 n 秒内高频事件再次被触发,则重新计算时间;思路:每次触发事件时都取消之前的延时调用方法:举个例子:做一个自动查询的功能假装下面的代码是从服务器获取的数据(下面会用到):// 假装这是个接口function getData(val){ return new Promise(functi...https://blog.csdn.net/sllailcp/article/details/1000899823. @output + EventEmitter

    Angular 父组件监听子组件事件--by EventEmitter - 简书EventEmitter的一个典型应用就是父组件监听子组件的事件。 子组件暴露一个 EventEmitter 属性,当事件发生时,子组件利用该属性 emits(向上弹射)事件...https://www.jianshu.com/p/145a06f052064. @HostListener

    https://angular.cn/api/core/HostListenericon-default.png?t=M5H6https://angular.cn/api/core/HostListener

    思考:@Directive + @HostListener 的使用应该可以做很多有意思的的事情。之前对指令的认知仅仅是停留在校验器的使用。

    或许可以开发更多的玩法?

  • 相关阅读:
    论文作图之高压缩比导出PDF
    LeetCode34.在排序数组中查找元素的第一个和最后一个位置
    JavaScript之变量、数据类型、数据转换、模板字符串
    【数据结构】优先级队列 - 堆
    openpnp - 手工修改配置文件(元件高度,size,吸嘴)
    手把手带你刷好题(牛客刷题⑤)
    基于Java毕业设计学生宿舍管理系统源码+系统+mysql+lw文档+部署软件
    sql server连接查询not be found问题
    如期而至的SVN服务器迁移引来一个大瓜XAMPP
    Docker从入门到跑路
  • 原文地址:https://blog.csdn.net/dongnihao/article/details/125627612
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号