案例: 一个登陆页面,连续多次点击登陆按钮,会造成多次触发提交事件,解决方式很多,但是感觉指令方式使用起来更简单,代码更简洁。
自定义click防抖指令
1.ionic4 内置指令生成一个空的指令
ionic g directive directives/debounce-click
生成文件如下:
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.登录页使用自定义的指令
- 1)在login.module.ts的声明中引入自定义的click指令
- 2)login.html页面中使用
- 其中login方法就是实现提交时候写的方法,在login.page.ts中
- 3)测试
ok,就不截图了
自此,大工告成!!