vue实现用户3秒内多次点击。请求只发送一次

最近做项目,用户连续点击按钮会一直向后台发送请求,最后按钮的状态会跟后台返回的不统一,于是用这个方法实现了用户不管点多少次,在3秒内只请求一次

看如下代码,使用点击事件的disabled属性

<button :disabled="state"  @click="clickbtn"></button>
//在data里面设置state原始的属性值
data(){
	return{
		state:false
//在methods里面写点击事件
clickbtn(){
	if(this.state == false){
			let that = this
			that.state = true
			setTimeout(()=>{
				//请求数据。。。
				//请求成功后在返回的状态里面加上下面这句话
				that.state = false
			},3000)

好啦,这样就实现了在3秒之前即使点击多少次,也只发送一次请求

vue实现用户3秒内多次点击。请求只发送一次最近做项目,用户连续点击按钮会一直向后台发送请求,最后按钮的状态会跟后台返回的不统一,于是用这个方法实现了用户不管点多少次,在3秒内只请求一次看如下代码,使用点击事件的disabled属性&lt;button :disabled="state" @click="clickbtn"&gt;&lt;/button&gt;//在data里面设置state原始的属性值data(){ return{ state:false }}//在methods
问题:在弹窗中有个按钮,点上线,会在列表中添加一条数据,然后弹窗消失。现在在点按钮时,由于点过快,在点上线按钮到弹窗消失期间,导致请求了多次数据,造成了在列表多出了几次同一时间的信息。希望在上线按钮到弹窗消失期间,只请求一次。 解决方法一:使用this.$nextTick(),nextTick(),是将回调函数延迟在下一次dom更新数据后调用,简单的理解是:当数据更新了,在dom中渲染后,自动执行该函数, 在弹窗组件中的data定义一个flag,表示请求状态 data() { mounted: function (el, binding) { el.addEventListener('click', () => { const events = el.style.pointerEvents if (events
相对于使用防抖和节流的操作,防抖和节流会受到网络请求的快慢影响,如果网络请求过慢,而且两次点的时间超过防抖和节流预设的时间,还会触发多次的。本方式使用捕捉promise中resolve和reject的方式,更加精确在什么时候可以触发禁止点和放开点 相对于使用变量控制,不需要额外的.. Vue.directive('preventReClick', { inserted (el, binding) { // console.log("binding-7", binding) el.addEventListener('click', () => {
Vue 2秒钟点多次,只触发一次事件 在开发中,有些提交保存按钮有时候会在短时间内被点多次,这样就会多次重复请求后端接口,造成数据的混乱,比如新增表单的提交按钮,多次点就会新增多条重复的数据。 需求:防止按钮在短时间内被多次点,使用防抖函数限制规定时间内只能点一次。 定义一个延迟执行的方法,如果在延迟时间内再调用该方法,则重新计算执行时间。 main.js中注册 Vue.directive('debounce', { inserted(el, binding, vno
$('.sumbit1').click(function () { $('.sumbit1').unbind();//在点事件里移除触发事件 var pad = $('input:radio[name=info]:checked').val(); if(typeof(pad)=='undefined'){ alert('请选择服务'); }els...
可以使用Vue的computed属性来实现请求只触发一次。在computed属性中定义一个方法,该方法返回一个Promise对象,然后在模板中使用该computed属性即可。由于computed属性只有在其依赖的数据发生变化时才会重新计算,因此请求只会触发一次。 示例代码如下: <template> <div>{{ data }}</div> </template> <script> export default { data() { return { isLoading: false, responseData: null computed: { fetchData() { if (!this.isLoading && !this.responseData) { this.isLoading = true return fetch('https://example.com/api/data') .then(response => response.json()) .then(data => { this.isLoading = false this.responseData = data } else { return Promise.resolve(this.responseData) data() { return this.fetchData.then(data => data.someProperty) </script>