微信小程序全局设置分享
1、问题:有个需求需要全部页面都要可以转发,要我一个一个去改,那是不可能的,于是上网找了一下全局配置的方法:https://blog.csdn.net/u012767761/article/details/119204973,发现了一些新知识
2、新知识:
监听路由api:wx.onAppRoute
这个api在微信文档里面是没有的,作用是监听路由的跳转,相当于vue里面的路由守卫
wx.onAppRoute((res) => { console.log('路由监听',{res}) })
let pages = getCurrentPages(),
注册小程序中的一个页面:Page()
接受一个 Object 类型参数,其指定页面的初始数据、生命周期回调、事件处理函数等。
Page({})
匿名函数的调用形式:有两种
!function(){}()
or
(function(){})()
2、思路:这个方法的思路是利用page是注册页面的方法,小程序调用的时候会调用page去把所有页面都注册一遍也就是调用一遍,这时创建一个全局变量PageTmp,把Page创建页面的方法赋给它,然后把page方法修改成我们的方法,这样小程序创建的时候就会调用page方法注册页面的时候就会把我们修改过的数据给注入进去,然后再调用全局变量PageTmp也就是注册页面的方法,注册页面。
结论:真是妙啊,写这个方法的人一定很了解微信架构,知道小程序的运行原理。
3、实操:
在app.js引用文件
require('utils/globalSharing.js')
globalSharing文件
// app.js /** * 全局分享配置,页面无需开启分享 * 使用隐式页面函数进行页面分享配置 * 使用隐式路由获取当前页面路由,并根据路由来进行全局分享、自定义分享 */ ! function () { //获取页面配置并进行页面分享配置 var PageTmp = Page Page = function (pageConfig) { //1. 获取当前页面路由 let routerUrl = "" wx.onAppRoute(function () { //app.js中需要在隐式路由中才能用getCurrentPages()获取到页面路由 let pages = getCurrentPages(), view = pages[pages.length - 1]; routerUrl = view.route }) //2. 全局开启分享配置 pageConfig = Object.assign({ onShareAppMessage: function () { //根据不同路由设置不同分享内容(微信小程序分享自带参数,如非特例,不需配置分享路径) let shareInfo = {} let noGlobalSharePages = [] //全局分享配置,如部分页面需要页面默认分享或自定义分享可以单独判断处理 if (!noGlobalSharePages.includes(routerUrl)) { let myUserId = wx.getStorageSync('myUserId') this.setData({ myUserId }) var page = routerUrl; getApp().globalData.saveShare(page, 'activityDiscount', -1, false) shareInfo = { path: `/${page}?scene=shareUserId%3D${this.data.myUserId}`, } } return shareInfo } }, pageConfig); // 配置页面模板 PageTmp(pageConfig); } }();
4、拓展:利用Page会被调用注册页面的功能,可以做一些需要全局配置的功能
主题:配置全局的data,也可以配置全局的主题切换方法,这样每个页面都不用去添加behaviors了
全局的方法:比如需要全局添加一个日期转换过滤的自定义基础方法等等,这样不需要引入就可以全局使用自定义的方法
分享朋友圈:全局去设置分享到朋友圈,当然之前要设置分享
反正是遍历所有页面,也可以利用方法过滤只配置某些页面等等
仔细想想可以遍历注册页面,那么,html,wxss那些是不是也是可以遍历进行全局配置的呢,只能说大有可为
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」