微信小程序 全局分享

初六复工,难以接受,我甚至能接受今天是我六十大寿但是我难以接受今儿是正月初六。

言归正传

年前写了个分享,还要所有的页面都要有分享,那我岂不是每个页面都要写一个onShareAppMessage?nonono,这不能这么干,这违背了我们少写一行是一行的理念。
所以,我得写个全局的分享,但是这个onShareAppMessage的触发点只有button和胶囊的三个点点,所以并不是简单的写个公共方法就能解决的事儿。

经过不懈的研究,写了以下demo,供大家参考。

首先呢这个方法得写在app.js里面

app.js

//这个function是要写在APP()的外面
!function () {
  var PageTmp = Page
  Page = function (pageConfig) {
    let routerUrl = ""
    wx.onAppRoute(function (res) {
      let pages = getCurrentPages(),        
        view = pages[pages.length - 1];
      routerUrl = view.route
    })
    pageConfig = Object.assign({
      onShareAppMessage: function () {
        //需要单独写分享方法的页面
        let noGlobalSharePages=["pages/a/a","pages/b/b"]
        //分享的时候要携带的参数
        let obj = {
            userId: config.user_name
        }
        let value = encodeURIComponent(JSON.stringify(obj))
        let shareObj={}
        //判断当前页面是不是需要单独写分享方法的页面
        if (!routerUrl.includes(noGlobalSharePages)){
            shareObj={
                title:config.text,
                path: 'pages/home/home?obj=' +value,
                imageUrl: config.ShareImg
            }
        }
        return shareObj
      }
    }, pageConfig);
    PageTmp(pageConfig);
  }
}();

APP({
    globalData:...,
    onshow(){...}
})
这个方法就基本成型了

然后呢,我在写的时候遇到了个小问题,就是我在这个方法里面拿不到globalData的数据,所以我就定义了个全局变量,在小程序初始化的时候把我需要用到的this.globalData赋值到我定义的变量上面

let config;
APP({
    onLunch(){
        // 赋值
        config=this.globalData;
    },
    globalData:{
        user_name:'..',
        text:'...',
        ShareImg:'....'
    }
})
用的时候就是 config.text 这样就行啦

这样的话,想用这个方法得页面就不能在页面的js里面写onShareAppMessage了,不然会把app.js里面的分享方法给覆盖掉

还有,如果想在某个页面里面写个单独的分享方法,就在js里面写个普通的onShareAppMessage就可以啦

mine.js

onShareAppMessage(){
    return {
        title:'我是一朵花',
        path:'...',
        imageUrl:'...'
    }
}

这就大功告成啦!!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容