小程序
小游戏
企业微信
微信支付
扫描小程序码分享
提一个需求:
wx.navigateTo 快速点击会多次加载同一页面,
是否可以在Page配置中添加 单例模式的配置。
7 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
唔...写错了,第二次运行 once 时 state 是新的。
修改:Page 里得去掉那层 function。惭愧惭愧
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
优雅,学习了
我会这样写,应该属于代理模式,我不太懂算法。
// fn 不运行完,再次调用 once 也没用
function
once(fn) {
var
state =
false
;
return
() {
if
(state)
true
fn && fn.apply(
this
, arguments);
}
Page({
click:
(e) {
once(() => {
console.log(
, e)
})()
},
})
其实判断 fn 的结束应该是写在 fn 的回调里的,但那样的话就越改越复杂了,除非可以用 await 写法。
var isTouch=false;
......
onShow: function () {
isTouch=false;
event...:function(e){
if(isTouch) return;
isTouch = true;
//我是这样做的,总觉得代码怪怪的
还想到另外一种,俗称节流,也就是固定间隔时间,1s 内只能点一次这种,其实也不妙。
谢谢你,用变量阻止解决了。
微信自家的公众号也是这样的,我觉得其实是不太好解决。
因为新建一个 WebView,并非是复用同一个对象,没法用单例模式呀。
日常开发中为了解决这个问题,我多半使用的是变量加回调来阻止。
并非限制在新建对象上,而是对事件触发本身做了规定。事件内函数不运行完,不能点下一次。
其实这个方案是不太妙的,希望能看到更好的办法。
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
唔...写错了,第二次运行 once 时 state 是新的。
修改:Page 里得去掉那层 function。惭愧惭愧
优雅,学习了
我会这样写,应该属于代理模式,我不太懂算法。
// fn 不运行完,再次调用 once 也没用
function
once(fn) {
var
state =
false
;
return
function
() {
if
(state)
return
;
state =
true
;
fn && fn.apply(
this
, arguments);
state =
false
;
}
}
Page({
click:
function
(e) {
once(() => {
console.log(
this
, e)
})()
},
})
其实判断 fn 的结束应该是写在 fn 的回调里的,但那样的话就越改越复杂了,除非可以用 await 写法。
var isTouch=false;
Page({
......
onShow: function () {
isTouch=false;
},
event...:function(e){
if(isTouch) return;
isTouch = true;
......
}
})
//我是这样做的,总觉得代码怪怪的
还想到另外一种,俗称节流,也就是固定间隔时间,1s 内只能点一次这种,其实也不妙。
谢谢你,用变量阻止解决了。
微信自家的公众号也是这样的,我觉得其实是不太好解决。
因为新建一个 WebView,并非是复用同一个对象,没法用单例模式呀。
日常开发中为了解决这个问题,我多半使用的是变量加回调来阻止。
并非限制在新建对象上,而是对事件触发本身做了规定。事件内函数不运行完,不能点下一次。
其实这个方案是不太妙的,希望能看到更好的办法。