如何将按钮单击去抖动延迟转换为文本框按键延迟?

关于7个死亡

我编写了以下代码来消除和延迟按钮按下的垃圾邮件:

app.directive.ts

// Debounce click method for buttons to prevent spamming during asynchronous function waits

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() debounceTime = 500;
  @Output() debounceClick = new EventEmitter();
  private clicks = new Subject();
  private subscription: Subscription;

  constructor() { }

  ngOnInit() {
    this.subscription = this.clicks.pipe(
      debounceTime(this.debounceTime)
    ).subscribe(e => this.debounceClick.emit(e));
  }

  ngOnDestroy() {
    this.subscription.unsubscribe();
  }

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

app.component.html

<button mat-raised-button appDebounceClick (debounceClick)="buttonPressed()" [debounceTime]="700">Example Button</button>

我的最终目标是有一个文本框,它只会在用户停止输入一定秒数后调用函数(非常类似于按钮)。我将如何制作类似的指令来代替文本框按键而不是按钮单击的文本?

编辑:

这是我当前的输入文本框 HTML(未去抖动):

<form class="form">
  <mat-form-field class="full-width" (keyup)="exampleFunction('exampleInputString')">
    <input matInput placeholder="Input something...">
  </mat-form-field>
</form>

关于7个死亡

解决方案相当简单。

指令.ts:

// Change click event to keyup event

@HostListener('click', ['$event'])@HostListener('keyup', ['$event'])

组件.html:

<form class="form">
  <mat-form-field class="full-width" appDebounceClick (debounceClick)="exampleFunction('exampleInputString')" [debounceTime]="700">
    <input matInput placeholder="Input something...">
  </mat-form-field>
</form>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将延迟转换为毫秒

来自分类Dev

如何将文本框转换为字节?

来自分类Dev

如何将文本框值转换为数组并在Java中转换为整数

来自分类Dev

如何将Angular Promise转换为jQuery延迟对象

来自分类Dev

单击按钮时如何将HTML文本框的值(内容)传递给javascript函数?

来自分类Dev

如何将活动控件转换为文本框类型?

来自分类Dev

如何将值文本框类型=数字转换为十进制

来自分类Dev

如何将活动控件转换为文本框类型?

来自分类Dev

如何将按钮链接到文本框?

来自分类Dev

将ConsoleWriteLine转换为文本框

来自分类Dev

Google如何将按键事件(无论在何处)重定向到其搜索文本框?

来自分类Dev

如何将任何格式的文本框日期转换为DateTime(YYYY-mm-dd)格式

来自分类Dev

如何将Gridview单元格值转换为另一页上相应的文本框值?

来自分类Dev

如何将文本框中的文本转换为零和一,如何将两列的内容拆分为许多其他列

来自分类Dev

如何将引导框类也转换为按钮类

来自分类Dev

如何通过单击按钮将文本添加到文本框

来自分类Dev

如何将文本表转换为熊猫数据框?

来自分类Dev

单击时如何将文本更改为文本框

来自分类Dev

单击时如何将文本更改为文本框

来自分类Dev

如何将listView转换为GridView抖动?

来自分类Dev

C#如何将此字符串[](从文本框)转换为IPAddresses的列表或数组

来自分类Dev

AngularJS单击按钮时如何将焦点放在文本框上

来自分类Dev

如何将击键发送到在单击之前保持隐藏的文本框?

来自分类Dev

如何减少按键的延迟?

来自分类Dev

动态添加文本框的Javascript,然后再次将文本框转换为文本

来自分类Dev

单击按钮后如何填充文本框?

来自分类Dev

单击提交按钮后如何保留文本框值

来自分类Dev

单击按钮后如何填充文本框?

来自分类Dev

如何获得单击按钮上的文本框值?

Related 相关文章

  1. 1

    如何将延迟转换为毫秒

  2. 2

    如何将文本框转换为字节?

  3. 3

    如何将文本框值转换为数组并在Java中转换为整数

  4. 4

    如何将Angular Promise转换为jQuery延迟对象

  5. 5

    单击按钮时如何将HTML文本框的值(内容)传递给javascript函数?

  6. 6

    如何将活动控件转换为文本框类型?

  7. 7

    如何将值文本框类型=数字转换为十进制

  8. 8

    如何将活动控件转换为文本框类型?

  9. 9

    如何将按钮链接到文本框?

  10. 10

    将ConsoleWriteLine转换为文本框

  11. 11

    Google如何将按键事件(无论在何处)重定向到其搜索文本框?

  12. 12

    如何将任何格式的文本框日期转换为DateTime(YYYY-mm-dd)格式

  13. 13

    如何将Gridview单元格值转换为另一页上相应的文本框值?

  14. 14

    如何将文本框中的文本转换为零和一,如何将两列的内容拆分为许多其他列

  15. 15

    如何将引导框类也转换为按钮类

  16. 16

    如何通过单击按钮将文本添加到文本框

  17. 17

    如何将文本表转换为熊猫数据框?

  18. 18

    单击时如何将文本更改为文本框

  19. 19

    单击时如何将文本更改为文本框

  20. 20

    如何将listView转换为GridView抖动?

  21. 21

    C#如何将此字符串[](从文本框)转换为IPAddresses的列表或数组

  22. 22

    AngularJS单击按钮时如何将焦点放在文本框上

  23. 23

    如何将击键发送到在单击之前保持隐藏的文本框?

  24. 24

    如何减少按键的延迟?

  25. 25

    动态添加文本框的Javascript,然后再次将文本框转换为文本

  26. 26

    单击按钮后如何填充文本框?

  27. 27

    单击提交按钮后如何保留文本框值

  28. 28

    单击按钮后如何填充文本框?

  29. 29

    如何获得单击按钮上的文本框值?

热门标签

归档