После этого Stackblitz
У меня есть директива, согласно которой при нажатии кнопка должна отключаться до определенного времени (для предотвращения двойного щелчка).
<button appThrottleClick (throttleClick)="click()">
BUTTON
</button>
<button appThrottleClick [disabled]="myValue" (throttleClick)="click()">
BUTTON VALUE
</button>
Я бы хотел, чтобы кнопка была отключена, а затем снова активирована через x секунд. Используя эту директиву здесь:
@Directive({
selector: '[appThrottleClick]'
})
export class ThrottleClickDirective implements OnInit, OnDestroy {
@HostBinding('attr.disabled') disabled: boolean;
@Input() throttleTime = 200;
@Output() throttleClick = new EventEmitter();
private clicks = new Subject();
private subscription: Subscription;
constructor() { }
ngOnInit() {
this.subscription = this.clicks.pipe(
throttleTime(this.throttleTime)
).subscribe(e => {
this.throttleClick.emit(e);
});
}
ngOnDestroy() {
this.subscription.unsubscribe();
}
@HostListener('click', ['$event'])
clickEvent(event) {
console.log('click')
if (this.disabled) { return; }
event.preventDefault();
event.stopPropagation();
this.disabled = true;
this.clicks.next(event);
setTimeout(() => { this.disabled = false; console.log('reset')}, this.throttleTime);
}
}
В основном:
Если кнопка не заблокирована, нажмите один раз, затем установите время восстановления и снова включите его. Если кнопка отключена, не нажимайте кнопку.
Проблема, с которой я сталкиваюсь, после нажатия и ожидания перезарядки никогда не включается снова. Даже если отключено, установлено значение false.