微信小程序全局设置分享

1、问题:有个需求需要全部页面都要可以转发,要我一个一个去改,那是不可能的,于是上网找了一下全局配置的方法:https://blog.csdn.net/u012767761/article/details/119204973,发现了一些新知识

2、新知识:

监听路由api:wx.onAppRoute

这个api在微信文档里面是没有的,作用是监听路由的跳转,相当于vue里面的路由守卫

wx.onAppRoute((res) => { 
     console.log('路由监听',{res})        
})
获取页面栈:getCurrentPages()
这个api在微信文档里面只是简单的在wx.navigateBack那里提了一下,相当于浏览器里面的history
   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那些是不是也是可以遍历进行全局配置的呢,只能说大有可为

posted @   Pavetr  阅读(522)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示