Angular实现防抖和节流的示例代码

 更新时间:2024年02月20日 09:10:53   作者:crary,记忆  
这篇博客主要是详细介绍两种常用Angular实现防抖和节流的方法:使用RxJS操作符和使用Angular自带的工具,文中通过代码示例给大家讲解的非常详细,需要的朋友可以参考下

在Angular中实现防抖和节流的方法有多种,这篇博客主要是详细介绍两种常用的方法:使用RxJS操作符和使用Angular自带的工具。

  • 使用RxJS操作符实现防抖和节流:

     防抖(Debounce):

//简易版
import { debounceTime } from 'rxjs/operators';
input.valueChanges.pipe(
  debounceTime(300)
).subscribe(value => {
  // 执行搜索操作
});
 
 
//详细版
import { Component } from '@angular/core';
import { fromEvent } from 'rxjs';
import { debounceTime } from 'rxjs/operators';
 
@Component({
  selector: 'app-debounce-example',
  template: '<input (input)="onInput($event)">'
})
export class DebounceExampleComponent {
  onInput(event: Event) {
    fromEvent(event.target, 'input')
      .pipe(
        debounceTime(300)
      )
      .subscribe(() => {
        // 执行输入框搜索操作
      });
  }
}
  • 节流(Throttle):
//简易版
import { throttleTime } from 'rxjs/operators';
scrollEvent.pipe(
  throttleTime(300)
).subscribe(() => {
  // 执行滚动操作
});
 
//详细版
import { Component } from '@angular/core';
import { fromEvent } from 'rxjs';
import { throttleTime } from 'rxjs/operators';
 
@Component({
  selector: 'app-throttle-example',
  template: '<div (scroll)="onScroll($event)">'
})
export class ThrottleExampleComponent {
  onScroll(event: Event) {
    fromEvent(event.target, 'scroll')
      .pipe(
        throttleTime(300)
      )
      .subscribe(() => {
        // 执行滚动操作
      });
  }
}
  • 使用Angular自带的工具实现防抖和节流:
  • 防抖(Debounce):
import { Component } from '@angular/core';
 
@Component({
  selector: 'app-debounce-example',
  template: '<input (input)="onInput($event)">'
})
export class DebounceExampleComponent {
  onInput(event: Event) {
    this.debounceSearch();
  }
 
  debounceSearch = this.debounce(() => {
    // 执行输入框搜索操作
  }, 300);
 
  debounce(func, delay) {
    let timer;
    return function() {
      clearTimeout(timer);
      timer = setTimeout(() => {
        func.apply(this, arguments);
      }, delay);
    };
  }
}
  • 节流(Throttle):
import { Component } from '@angular/core';
 
@Component({
  selector: 'app-throttle-example',
  template: '<div (scroll)="onScroll($event)">'
})
export class ThrottleExampleComponent {
  onScroll(event: Event) {
    this.throttleScroll();
  }
 
  throttleScroll = this.throttle(() => {
    // 执行滚动操作
  }, 300);
 
  throttle(func, delay) {
    let canRun = true;
    return function() {
      if (!canRun) return;
      canRun = false;
      setTimeout(() => {
        func.apply(this, arguments);
        canRun = true;
      }, delay);
    };
  }
}

以上就是Angular实现防抖和节流的示例代码的详细内容,更多关于Angular防抖和节流的资料请关注脚本之家其它相关文章!

相关文章

  • AngularJS中如何使用echart插件示例详解

    AngularJS中如何使用echart插件示例详解

    之前因为项目的需求,第一次系统的使用了angular这一优秀的js框架,其所拥有的许多优秀特性极大的方便了项目的开发,然而在开发中也遇到过不少的问题,趁着最近有时间给大家总结一下,这篇文章将会介绍使用angularjs1结合百度的图表插件echart作为例子用以演示。
    2016-10-10
  • Angular脚手架开发的实现步骤

    Angular脚手架开发的实现步骤

    这篇文章主要介绍了Angular脚手架开发的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • AngularJS基于MVC的复杂操作实例讲解

    AngularJS基于MVC的复杂操作实例讲解

    下面小编就为大家分享一篇AngularJS基于MVC的复杂操作实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • Angularjs实现多图片上传预览功能

    Angularjs实现多图片上传预览功能

    这篇文章主要介绍了Angularjs实现多图片上传预览功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • 详解angular中通过$location获取路径(参数)的写法

    详解angular中通过$location获取路径(参数)的写法

    本篇文章主要介绍了详解angular中通过$location获取路径(参数)的写法 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-03-03
  • 详解Angularjs中的依赖注入

    详解Angularjs中的依赖注入

    这篇文章主要为大家详细介绍了Angularjs中的依赖注入,AngularJS提供了一个至高无上的依赖注入机制,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • Angular中使用ng-zorro图标库部分图标不能正常显示问题

    Angular中使用ng-zorro图标库部分图标不能正常显示问题

    这篇文章主要介绍了Angular中使用ng-zorro图标库部分图标不能正常显示问题,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04
  • Angular2安装angular-cli

    Angular2安装angular-cli

    这篇文章主要介绍了Angular2安装angular-cli ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • AngularJS实现表单手动验证和表单自动验证

    AngularJS实现表单手动验证和表单自动验证

    本文是对AngularJS表单验证,手动验证或自动验证的讲解,对学习JavaScript编程技术有所帮助,感兴趣的小伙伴们可以参考一下
    2015-12-12
  • Angular 2父子组件数据传递之@Input和@Output详解(下)

    Angular 2父子组件数据传递之@Input和@Output详解(下)

    这篇文章主要给大家介绍了关于Angular 2父子组件数据传递之@Input和@Output的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-07-07

最新评论