Angular+TS+Rxjs实现防抖的自定义指令

Angular防抖自定义指令

记录一下angular自定义指令

创建自定义指令文件debounce.directive.ts

import { Directive, EventEmitter, HostListener, Input, OnDestroy, OnInit, Output } from '@angular/core';
import { Subject, Subscription } from 'rxjs';
import { debounceTime } from 'rxjs/operators';

@Directive({
  selector: '[appDebounceClick]'
})
export class DebounceClickDirective implements OnInit, OnDestroy {
  @Input() public debounceTime = 500;
  @Output() public debounceClick = new EventEmitter();
  // tslint:disable-next-line
  private clicks = new Subject<any>();
  private subscription: Subscription;
  constructor() {}
  public ngOnInit(): void {
    this.subscription = this.clicks
      .pipe(debounceTime(this.debounceTime))
      .subscribe(e => this.debounceClick.emit(e));
  }
  public ngOnDestroy(): void {
    this.subscription.unsubscribe();
  }

  @HostListener('click', ['$event'])
  public clickEvent(event: MouseEvent): void {
    event.preventDefault();
    event.stopPropagation();
    this.clicks.next(event);
  }
}


指令导出

import { NgModule } from '@angular/core';
import { DebounceClickDirective } from './debounce.directive';


@NgModule({
  declarations: [
    DebounceClickDirective
  ],
  exports: [
    DebounceClickDirective
  ],
})
export class SharedDirectivesModule {
}

实际使用

<span (debounceClick)="export()" appDebounceClick [debounceTime]="300">导出模版span>

你可能感兴趣的:(前端踩坑,typescript,前端,angular)