ionic4 click防抖指令

简介: ionic4 click防抖指令

案例: 一个登陆页面,连续多次点击登陆按钮,会造成多次触发提交事件,解决方式很多,但是感觉指令方式使用起来更简单,代码更简洁。


自定义click防抖指令


1.ionic4 内置指令生成一个空的指令


ionic g directive directives/debounce-click


生成文件如下:

1dc618a0ed9580ce8bfa6facb208c08f.png


2.书写debounce-click.directive.ts指令


import {Directive, EventEmitter, HostListener, Input, OnInit, Output} from '@angular/core';
import {Subject, Subscription} from 'rxjs';
import {debounceTime} from 'rxjs/operators';
@Directive({
  selector: '[appDebounceClick]'
})
export class DebounceClickDirective implements OnInit {
    @Input() debounceTime = 500;
    @Output() debounceClick = new EventEmitter();
    private clicks = new Subject();
    private subscription: Subscription;
  constructor() { }
    ngOnInit(): void {
        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();
        console.log('Click from Host Element!');
        this.clicks.next(event);
    }
}


3.登录页使用自定义的指令


5d4c6812c8535adbb050f4ddf2e1bce8.png


1)在login.module.ts的声明中引入自定义的click指令

46a9d80a6e05e4e3b19d57a0ee70bcdf.png

2)login.html页面中使用

66ba272a0bfc97be54a5fa679e3d5482.png

其中login方法就是实现提交时候写的方法,在login.page.ts中

88b9988b40447cb37c7e3c492d49867f.png

3)测试


ok,就不截图了

自此,大工告成!!


相关文章
|
2月前
|
JavaScript 前端开发 算法
函数防抖?一个vue指令搞定
函数防抖?一个vue指令搞定
46 0
|
9月前
|
JavaScript
11avalon - 指令
11avalon - 指令
30 0
|
2月前
|
JavaScript
vue3以指令的形式使用防抖事件
vue3以指令的形式使用防抖事件
103 2
|
JavaScript 前端开发 API
(译)看得见的 JavaScript:事件循环(Event Loop)
(译)看得见的 JavaScript:事件循环(Event Loop)
73 1
|
2月前
vue3用指令的防抖事件
vue3用指令的防抖事件
105 0
|
2月前
|
JavaScript 前端开发
JS实现可以控制的定时器,setInterval,clearInterval
JS实现可以控制的定时器,setInterval,clearInterval
26 0
|
9月前
25avalon - 指令ms-on*(事件绑定)
25avalon - 指令ms-on*(事件绑定)
37 1
|
10月前
|
JavaScript 前端开发
关于 JavaScript 事件循环 Event Loop 的一些理解
关于 JavaScript 事件循环 Event Loop 的一些理解
|
运维 JavaScript 前端开发
brython | timer 计时器
brython | timer 计时器
68 1
lodash的tap操作
lodash的tap操作
66 0