uni开发微信小程序解决全局分享分销问题开发微信小程序解决全局分享分销问题
uni开发微信小程序解决全局分享分销问题开发微信小程序解决全局分享分销问题
1. 需求需求
1.小程序内每个页面都要打开胶囊分享按钮并实现分销
2.分享功能应该是在用户登录之后才予以打开
3.不想做在每个页面都写分享钩子的傻逼操作
2.实现实现
1.技术点:
vueX 、 Vue.mixin 、 路由监听(uni.onAppRoute)、 async await
2.实现思路:
用户登录后立即获取分销 parentId 置入state 或者挂载原型备用 == >> ; 使用mixin混入打开分享按钮
、监听路由并重写分享钩子
3.代码
//此处是在登陆完成后的操作 ; 分享信息中使用了 async await 保证正确加载信息
//登录成功的话就请求分享信息全局使用 && 表示可以打开全局分享了 !!!
FUN.shareUP({ //调起分享方法 == >> 配置分享信息置入state 的 share中
commit,
rootState
});
Vue.mixin({ // 打开分享按钮
//同名钩子函数将混合为一个数组,因此都将被调用。另外,混入对象的钩子将在组件自身钩子之前调用。 //两次调用 ; 不大行
onLoad() {
// console.log('注入!=======-=-=-=-=-=-=-')
uni.showShareMenu({})
},
});
uni.onAppRoute(function(res) { //在此监听路由
//获取加载的页面
let pages = getCurrentPages(),
//获取当前页面的对象
view = pages[pages.length - 1],
data;
if (view) {
console.log('监听路由')
// console.log(view)
data = view.data;
// console.log(data)
console.log('是否重写分享方法', data.isOverShare ? '是!' : '否!'); //这里 首次渲染的时候没有打开 ; 首次切换路由的时候也没打开 !! 03 14 // 监听路由?
if (!data.isOverShare) {
data.isOverShare = true;
// console.log(data)
view.onShareAppMessage = function() {
console.log(_this.share)
//分享配置
return {
..._this.share
};
};
console.log(view)
}
}
});
//整理分享信息 at vuex中
//分享
async shareUP({
commit,
rootState
}) {
//请求文案
let imageUrl;
await FUN.GetShareImg().then((val) => {
imageUrl = val; //这里实际上是写上了 ; 不用管了 ;
});
console.log(imageUrl)
$http.get('yourUrl', {
params: {
}
})
.then(res => {
// console.log(res.data.data.shareId) // || shareName