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

自此,大工告成!!


相关文章
|
9月前
|
JavaScript 前端开发
VUE指令: v-cloak指令是用来解决什么问题的?
VUE指令: v-cloak指令是用来解决什么问题的?
283 0
|
9月前
|
缓存 前端开发 测试技术
antd renderFormItem AutoComplete结合防抖导致防抖失效的解决办法
antd renderFormItem AutoComplete结合防抖导致防抖失效的解决办法
147 3
|
9月前
|
JavaScript 前端开发 算法
函数防抖?一个vue指令搞定
函数防抖?一个vue指令搞定
81 0
|
9月前
|
存储 JavaScript 前端开发
JS的执行原理,一文了解Event Loop事件循环、微任务、宏任务
了解JavaScript的事件循环和任务队列对于处理异步任务至关重要。事件循环由主线程和任务队列组成,当主线程执行完同步任务后,会检查任务队列,按顺序执行宏任务和微任务。宏任务包括`setTimeout`等,微任务如`Promise`的回调。在实际开发中,事件循环保证了代码的非阻塞执行,提高了用户体验。例如,`setTimeout`的回调会在当前宏任务结束后,所有微任务执行完才会执行。理解这一机制对于解决面试中的异步问题非常有帮助。
93 0
JS的执行原理,一文了解Event Loop事件循环、微任务、宏任务
|
9月前
|
前端开发 JavaScript
深入理解JavaScript的事件循环(Event Loop)
深入理解JavaScript的事件循环(Event Loop)
|
JavaScript 前端开发 API
(译)看得见的 JavaScript:事件循环(Event Loop)
(译)看得见的 JavaScript:事件循环(Event Loop)
98 1
|
9月前
vue3用指令的防抖事件
vue3用指令的防抖事件
278 0
|
JavaScript 前端开发 容器
Vue 中可以提高运行效率的内置指令:v-cloak ,v-once, v-pre
Vue 中可以提高运行效率的内置指令:v-cloak ,v-once, v-pre
142 0
|
JavaScript Java
JS 清除定时器timer的两种方法
JS 清除定时器timer的两种方法
502 0
|
存储 前端开发
定时器中使用React hooks的 state 值不变的解决办法
定时器中使用React hooks的 state 值不变的解决办法
199 0

热门文章

最新文章