美文网首页
angular+ts 实现函数防抖

angular+ts 实现函数防抖

作者: 饱饱想要的灵感 | 来源:发表于2023-02-19 16:53 被阅读0次
  1. user-form.component.html页面, 为nz-select组件设置搜索函数(nzOnSearch)="searchUserData($event)"
  <nz-spin [nzSpinning]="loading"></nz-spin>
  <nz-select name="userName" nzAllowClear nzShowSearch [(ngModel)]="selectedUser" required #UserName2="ngModel" nzPlaceHolder="请输入名称搜索"  style="width: 100%"
        (nzOnSearch)="searchUserData($event)">
        <nz-option *ngFor="let user of UserData" [nzValue]="user" [nzLabel]="user.name"></nz-option>
  </nz-select>
  1. UserComponent.ts, 将搜索值加入队列, 并设置队列消费事件, 其中debounceTime(600)表示600毫秒无连续输入才触发
import {OnInit} from '@angular/core';
import {Subject} from 'rxjs';
import {debounceTime, distinctUntilChanged, switchMap} from 'rxjs/operators';

@Component({
  templateUrl: './user-form.component.html'
})
export class UserComponent implements OnInit{
  userData:User[] = [];
  private searchQueue$ = new Subject<string>();
  loading: boolean;
  
  constructor(private userService: UserService) {
    }

  ngOnInit(): void {
    this.searchQueue$.pipe(
        debounceTime(600),
        distinctUntilChanged(),
        switchMap(value => {
          this.loading = true;
          return this.userService.listUserByName(value);
        }
  )).subscribe(json => {
      this.loading = false;
      if (json.returnCode == 1) {
        this.userData = json.content;
      } else {
        this.message.error('请求失败,请重新输入');
      }
    });

  }

  searchUserData (value: string) {
    this.searchQueue$.next(value);
  }
  
}
  1. UserService.ts, 将搜索值传至后端, 若参数为空, 则直接返回Observable对象
import {HttpClient, HttpParams} from '@angular/common/http';
import {Injectable} from '@angular/core';
import {JsonResponse} from "../../../base/domain/json-response";
import {Observable, of} from 'rxjs';

@Injectable()
export class UserService {
    constructor(private http: HttpClient) {
    }

    listUserByName(name:string):Observable<JsonResponse<any>> {
        if (!name) {
            let jsonResponse = new JsonResponse<any>();
            jsonResponse.returnCode = 1;
            jsonResponse.content = [];
            // 错误用法 return new Observable(() => jsonResponse);
            return of(jsonResponse);
        }
        let httpParams = new HttpParams().set("name", name);
        return this.http.post<JsonResponse<any>>('/userApi/listUserByName', httpParams);
    }

}

相关文章

  • 防抖函数及其应用

    建议使用 lodash 插件里面的 debounce 函数来实现 1、防抖函数简单原理 2、防抖函数的应用

  • 深入JavaScript Day32 - 手写防抖函数debou

    一、防抖函数代码实现 防抖:适用于高频函数的【延迟执行】,比如搜索框的联想功能 0、测试代码 1、最基本的防抖函数...

  • JS笔试题

    JavaScript 笔试部分 实现防抖函数(debounce) 防抖函数原理:在事件被触发 n 秒后再执行回调,...

  • 准备:深拷贝、防抖、节流

    深拷贝 JSON 转换 如果对象中有函数、undefind,无法拷贝出 普通递归函数实现 防抖 防抖的原理就是:触...

  • 性能优化

    1.实现一个防抖函数 2.实现一个节流函数

  • JS实现节流函数,防抖函数

    节流函数(throttling fountion)和防抖函数(debouncing fountion)都是为了实现...

  • 分享:22道JavaScript高频手写面试题

    JavaScript笔试部分 实现防抖函数(debounce) 防抖函数原理:在事件被触发n秒后再执行回调,如果在...

  • javaScript 防抖函数

    一. 防抖函数的定义与使用 防抖函数的定义 防抖函数的调用 二. 防抖函数应用场景 其实在HTML 和javaSc...

  • JavaScript-函数节流

    在上一篇文章 JavaScript-函数防抖 中我们学习了什么是防抖,并且一步步实现了防抖函数,今天我们一起来学习...

  • 手写实现系列

    实现 new 方法 Object.create 的实现原理 实现数据绑定 深拷贝 防抖函数 节流函数 冒泡排序 快速排序

网友评论

      本文标题:angular+ts 实现函数防抖

      本文链接:https://www.haomeiwen.com/subject/lkqbhdtx.html