В моем приложении vue.js там могут быть удалены элементы.Остановить несколько кликов vue.js
Элемент DIV выглядит следующим образом:
<div class="ride-delete" @click="delete">
<p>Delete</p>
</div>
Это метод, который обрабатывает click
:
methods: {
delete()
{
swal({
title: "Weet u het zeker?",
text: "Het is niet mogelijk deze handeling te herstellen!",
cancelButtonText: 'Stop',
type: "error",
showCancelButton: true,
confirmButtonColor: "#DD6B55",
confirmButtonText: "Ja, verwijder deze rit.",
closeOnConfirm: false
},() => {
RideService.destroy(this.ride)
.then(() => {
swal({
title: "Rit succesvol verwijderd",
type: "success",
showCancelButton: false,
timer: 2000,
showConfirmButton: false
});
this.$router.go('/administratie/ritten');
});
});
}
}
Так как я могу убедиться, что если пользователь нажмет 3 раза быстрее после каждого другой будет отправлен только один запрос. Прямо сейчас есть отправка 3. Таким образом, кнопка должна быть отключена, если пользователь нажимает на нее один раз.
--EDIT--
import swal from 'sweetalert';
import RideService from '../../services/RideService';
export default {
data() {
return {
ride: { user: {}, location: {}, type: {} },
deleting: false
}
},
route: {
data ({ to }) {
return RideService.show(this.$route.params.rideId)
.then(function(data)
{
this.ride = data.data.ride;
}.bind(this));
}
},
methods: {
remove()
{
if (!this.deleting) {
this.deleting = true
swal({
title: "Weet u het zeker?",
text: "Het is niet mogelijk deze handeling te herstellen!",
cancelButtonText: 'Stop',
type: "error",
showCancelButton: true,
confirmButtonColor: "#DD6B55",
confirmButtonText: "Ja, verwijder deze rit.",
closeOnConfirm: false
},() => {
RideService.destroy(this.ride)
.then(() => {
swal({
title: "Rit succesvol verwijderd",
type: "success",
showCancelButton: false,
timer: 2000,
showConfirmButton: false
});
this.deleting = false
this.$router.go('/administratie/ritten');
});
});
this.deleting = false
}
}
}
}
</script>
--edit 2--
<template>
<div class="row center">
<div class="panel ride">
<div class="ride-title bar-underline">
<div class="ride-item-title">
<strong class="ride-item-title-body">Rit van {{ ride.created_at }}</strong>
</div>
</div>
<div class="ride-item bar-underline">
<div class="ride-item-title">
<p>Naam</p>
</div>
<div class="ride-item-content">
<p>{{ ride.user.name }}</p>
</div>
</div>
<div class="ride-item bar-underline">
<div class="ride-item-title">
<p>Locatie van</p>
</div>
<div class="ride-item-content">
<p>{{ ride.location.from }}</p>
</div>
</div>
<div class="ride-item bar-underline">
<div class="ride-item-title">
<p>Locatie naar</p>
</div>
<div class="ride-item-content">
<p>{{ ride.location.from }}</p>
</div>
</div>
<div class="ride-item bar-underline">
<div class="ride-item-title">
<p>Beschrijving</p>
</div>
<div class="ride-item-content">
<p>{{ ride.location.description }}</p>
</div>
</div>
<div class="ride-item bar-underline">
<div class="ride-item-title">
<p>Kmz</p>
</div>
<div class="ride-item-content">
<p>{{ ride.location.kmz }}</p>
</div>
</div>
<div class="ride-item bar-underline">
<div class="ride-item-title">
<p>kmp</p>
</div>
<div class="ride-item-content">
<p>{{ ride.location.kmp }}</p>
</div>
</div>
<div class="ride-item bar-underline">
<div class="ride-item-title">
<p>Uren</p>
</div>
<div class="ride-item-content">
<p>{{ ride.location.hour }} uur</p>
</div>
</div>
<div class="ride-item bar-underline">
<div class="ride-item-title">
<p>Google maps</p>
</div>
<div class="ride-item-content">
<p>{{ ride.location.maps }}</p>
</div>
</div>
<div class="ride-item bar-underline">
<div class="ride-item-title">
<p>Datum</p>
</div>
<div class="ride-item-content">
<p>{{ ride.created_at }}</p>
</div>
</div>
<div class="ride-item bar-underline">
<div class="ride-item-title">
<p>Tijd</p>
</div>
<div class="ride-item-content">
<p>{{ ride.time }}</p>
</div>
</div>
<div class="ride-item bar-underline">
<div class="ride-item-title">
<p>Factureerbare tijd</p>
</div>
<div class="ride-item-content">
<p>{{ ride.billabletime }} uur</p>
</div>
</div>
<div class="ride-item bar-underline">
<div class="ride-item-title">
<p>Type</p>
</div>
<div class="ride-item-content">
<p>{{ ride.type.name }}</p>
</div>
</div>
<div class="ride-item">
<div class="ride-edit">
<p>Edit</p>
</div>
<div class="ride-delete" @click="remove">
<p>Delete</p>
</div>
</div>
</div>
</div>
</template>
<script>
import swal from 'sweetalert';
import RideService from '../../services/RideService';
export default {
data() {
return {
ride: { user: {}, location: {}, type: {} },
processing: false
}
},
route: {
data ({ to }) {
return RideService.show(this.$route.params.rideId)
.then(function(data)
{
this.ride = data.data.ride;
}.bind(this));
}
},
methods: {
remove()
{
if (this.processing === true) {
return;
}
this.processing = true
swal({
title: "Weet u het zeker?",
text: "Het is niet mogelijk deze handeling te herstellen!",
cancelButtonText: 'Stop',
type: "error",
showCancelButton: true,
confirmButtonColor: "#DD6B55",
confirmButtonText: "Ja, verwijder deze rit.",
closeOnConfirm: false
},() => {
RideService.destroy(this.ride)
.then(() => {
swal({
title: "Rit succesvol verwijderd",
type: "success",
showCancelButton: false,
timer: 2000,
showConfirmButton: false
});
this.processing = false
this.$router.go('/administratie/ritten');
});
});
this.processing = false
}
}
}
</script>
Я предлагаю сохранить состояние асинхронного запроса в свойстве данных (например, «обработка: false» и когда пользователь нажимает на элемент, устанавливает его в значение «истина»), а затем в 'delete() 'проверяют состояние для продолжения или остановки кода. Наконец, сбросьте состояние в обработчиках успеха/отказа. –
Не могли бы вы привести пример? – Jamie
Просто отправил пример :) –