公司有个小程序需要埋点,然后我看了之前的前辈写的代码,是每个页面在onshow onhide(或者在点击)等生命周期或者事件写的调用后端接口。这样就很麻烦,每个页面都要去写重复的代码。有没有简单点的方式?
嗯,这个可以有:
小程序每个页面的Page就是一个函数咯,那可不可以重写。。。。。。。。。
试试看
function MyPage(options) { // 在Page函数中调用原生的Page函数,并传入options参数 const originalPage = Page; options = options || {}; // 重写options中的生命周期函数和事件处理函数 ['onLoad', 'onShow', 'onHide', 'onUnload'].forEach(function(key) { const originalFunc = options[key]; options[key] = function(options) { // 在生命周期函数中添加相应的埋点代码 console.log(`Page ${key} called`); if (originalFunc) { originalFunc.call(this, options); } } }); // 调用原生的Page函数,并传入重写后的options参数 return originalPage(options); }
试了一下好像OK耶,嗯。。。。。那.........我们再把事件也加上吧,就变成了以下这样的了
function MyPage(options) { // 在Page函数中调用原生的Page函数,并传入options参数 const originalPage = Page; options = options || {}; // 重写options中的生命周期函数和事件处理函数 ['onLoad', 'onShow', 'onHide', 'onUnload'].forEach(function(key) { const originalFunc = options[key]; options[key] = function(options) { // 在生命周期函数中添加相应的埋点代码 console.log(`Page ${key} called`); if (originalFunc) { originalFunc.call(this, options); } } }); ['bindtap', 'bindlongpress', 'bindinput'].forEach(function(key) { const originalFunc = options[key]; options[key] = function(e) { // 在事件处理函数中添加相应的埋点代码 console.log(`Event ${key} called`); if (originalFunc) { originalFunc.call(this, e); } } }); // 调用原生的Page函数,并传入重写后的options参数 return originalPage(options); }
在以上代码中,我们创建了一个新的MyPage函数,并重写了Page函数的行为。在重写的MyPage函数中,我们首先调用了原生的Page函数,并将options参数传递给它。然后,我们在options中找到生命周期函数和事件处理函数,并重写它们的行为,以便添加相应的埋点代码。在重写的生命周期函数中,我们添加了输出日志的代码,可以根据具体需求替换成实际的埋点代码。在重写的事件处理函数中,我们也添加了输出日志的代码,可以根据具体需求替换成实际的埋点代码。
接下来-------------------------------------------------------------------
我们把页面的代码替换一下,将所有的Page函数改为MyPage函数。
Page({ data: { message: 'Hello, world!' } })
换成这样
MyPage({ data: { message: 'Hello, world!' } })
这样,就可以在所有页面中自动添加相应的埋点代码,从而实现全局埋点的需求。
标签:思路,函数,程序,options,originalFunc,key,埋点,Page From: https://www.cnblogs.com/maomao93/p/17323849.html