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,就不截图了

自此,大工告成!!


相关文章
|
8月前
|
JavaScript 前端开发
VUE指令: v-cloak指令是用来解决什么问题的?
VUE指令: v-cloak指令是用来解决什么问题的?
237 0
|
8月前
|
缓存 前端开发 测试技术
antd renderFormItem AutoComplete结合防抖导致防抖失效的解决办法
antd renderFormItem AutoComplete结合防抖导致防抖失效的解决办法
129 3
|
8月前
|
JavaScript 前端开发 算法
函数防抖?一个vue指令搞定
函数防抖?一个vue指令搞定
78 0
vue+element Form键盘回车事件页面刷新解决
问题描述:如下代码所示,使用element-ui 中的el-form组件对table进行条件查询,当查询条件仅有一项时,使用@keyup.
1579 0
|
JavaScript
vue3中input事件防抖处理
vue3中input事件防抖处理
268 2
|
8月前
vue3用指令的防抖事件
vue3用指令的防抖事件
262 0
|
8月前
|
前端开发
elementui的el-dialog组件与el-tabs同时用导致浏览器卡死的原因解决
elementui的el-dialog组件与el-tabs同时用导致浏览器卡死的原因解决
171 0
25avalon - 指令ms-on*(事件绑定)
25avalon - 指令ms-on*(事件绑定)
64 1
lodash的tap操作
lodash的tap操作
97 0
|
JavaScript 前端开发
深入理解JavaScript——防抖与节流
防抖和节流都是闭包的应用,先理解闭包,再理解防抖和节流
160 0
深入理解JavaScript——防抖与节流

热门文章

最新文章

下一篇
开通oss服务