我试着用一个变量来控制,但没有效果.
我尝试在 data()定义一个变量,bIsLoginProcess
然后,希望用try...finally...机制, 想禁止同时两次执行onclick
但实际失败了,没有作用.
(我在服务端,仍然发现是同时2次登录了)
(当然,这个问题我可以在服务端控制, 但还有许多单据的保存提交问题,就不好处理了)
哪位仁兄指点一下, 有什么好的方法吗?
<script>
export default {
data() {
return {
bIsLoginProcess: false
}
},
methods: {
login() {
if (this.bIsLoginProcess) {
uni.showModal({
title: '错误信息',
content: '哈哈你重复点了',
showCancel: false
});
return;
};
try {
this.bIsLoginProcess = true;
//登录过程.......
} finally {
this.bIsLoginProcess = false;
};
}
}
}
</script>
6 个回复
1***@qq.com (作者)
我尝试使用 disabled的方式来控制,也证明是无效的(仍可以快速点击2次)
<button type='warn' @tap="login" :disabled="bIsLoginProcess">登录</button>
嘻嘻哈哈S - 1122
使用节流,或调用showLoading
1***@qq.com (作者)
已证明: :loading="xxxx" 的方式, 无效. 仍可以快速双击两次
2023-02-10 13:21
嘻嘻哈哈S
回复 1***@qq.com: 是 uni.showLoading 弹框加载提示, 需要设置 mask: true
2023-02-13 08:48
西恩十月
防抖函数,用lodash或者uView自带的debounce
1***@qq.com (作者)
我试了一下,节流函数是我要的效果.
但是, 无法访问当前界面的变量:
要怎么书写, 才能访问到 this.myUserName 呢?
嘻嘻哈哈S
这个
console.log(this.myUserName)
外面没有函数,所以它指向的是 script 就是全局 global2023-02-13 08:57
不老刘
通过button的disabled 控制就够了吧,有必要搞那么繁琐吗?
1***@qq.com (作者)
如果我快速双击 , 它会执行两次的.( disabled也是一样, 无法解决)
2023-02-10 17:05
1***@qq.com (作者)
最终方案: 采用"函数节流throttle"在前端控制一下.
同时, 后端采用事务保护机制, 从根源上保证不会重复执行.(不论你如何乱搞,都无法重复执行)
方法:
前端一进入页面时, 生成一个GUID
然后, 保存时, 把这个GUID写入一个表中.
如果已有此GUID(无法重复插入), 那就表示, 你是重复点击.
当然, 这里要用到事务保护功能.(否则仍然可能重复)
当然,更完美的还要有一个1%的机率,删除2天前的GUID.同时配合日期索引,以便保证事务不会互卡!