uni-app 微信小程序全局分享
<p class="md-end-block md-p md-focus"><span class="md-plain">实际使用中,经常需要小程序分享到好友或者朋友圈,一般而言是一个个页面去设置。</span></p><p class="md-end-block md-p"><span class="md-plain md-expand">官网分享介绍:<span class="md-link md-pair-s">https://uniapp.dcloud.io/api/plugins/share?id=onshareappmessage</span></span></p>
<p class="md-end-block md-p">项目地址:https://gitee.com/jielov/uni-app-tabbar</p>
<p class="md-end-block md-p"><span class="md-plain">单页面每一个需要分享的页面多需要单独写上</span></p>
<div class="cnblogs_code">
<pre>export <span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">发送给朋友</span>
<span style="color: rgba(0, 0, 0, 1)">onShareAppMessage(res) {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (res.from === 'button') {<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 来自页面内分享按钮</span>
<span style="color: rgba(0, 0, 0, 1)"> console.log(res.target)
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
title: </span>'自定义分享标题'<span style="color: rgba(0, 0, 0, 1)">,
path: </span>'/pages/test/test?id=123'<span style="color: rgba(0, 0, 0, 1)">
}
},
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">分享到朋友圈</span>
<span style="color: rgba(0, 0, 0, 1)">onShareTimeline(res) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
title: </span>'自定义分享标题'<span style="color: rgba(0, 0, 0, 1)">,
path: </span>'/pages/test/test?id=123'<span style="color: rgba(0, 0, 0, 1)">
}
}
}</span></pre>
</div>
<p class="md-end-block md-p md-focus"><span class="md-plain md-expand">重复代码不说,还特别容易搞混,一不小心就漏掉参数忘记修改。</span></p>
<p class="md-end-block md-p"><span class="md-pair-s"><strong>分享参数配置介绍:</strong></span></p>
<p class="md-end-block md-p"><span class="md-pair-s"><strong><img src="https://img2020.cnblogs.com/blog/2237618/202111/2237618-20211120141953623-330666088.png" alt="" loading="lazy"></strong></span></p>
<h3 class="md-end-block md-heading md-focus"><span class="md-plain">全局分享</span></h3>
<p class="md-end-block md-p"><span class="md-plain"> 减少每个页面重复代码,全局设置分享代码。</span></p>
<p class="md-end-block md-p"><span class="md-plain"> 先在更目录下创建<span class="md-pair-s "><strong>utils</strong><span class="md-plain">文件夹下,创建<span class="md-pair-s"><strong>wxShare.js</strong></span></span></span></span></p>
<p> <img src="https://img2020.cnblogs.com/blog/2237618/202111/2237618-20211120142012370-144664895.png" alt="" loading="lazy"></p>
<p id="1637389257704"> <span class="md-plain md-expand">创建成功后在<span class="md-pair-s "><strong><span class="md-plain">mian.js</span></strong><span class="md-plain md-expand">中导入该wxShare.js</span></span></span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">分享设置</span>
import share from './utils/wxShare.js'<span style="color: rgba(0, 0, 0, 1)">
Vue.mixin(share)</span></pre>
</div>
<h3 class="md-end-block md-heading md-focus"><span class="md-plain">wxShare.js简介</span></h3>
<p class="md-end-block md-p"><span class="md-plain md-expand"> 创建一个页面基础js,包含<span class="md-pair-s"><strong>data,onShareAppMessage,onShareTimeline</strong><span class="md-plain">三个即可</span></span></span></p>
<p class="md-end-block md-p"><span class="md-pair-s "><strong> data:</strong><span class="md-plain">分享参数设置:可以参考最开始的配置图</span></span></p>
<p class="md-end-block md-p"><span class="md-pair-s"><strong> onShareAppMessage:</strong><span class="md-plain">分享到微信好友配置</span></span></p>
<p class="md-end-block md-p"><span class="md-pair-s"><strong> onShareTimeline:</strong><span class="md-plain">分享到朋友圈配置</span></span></p>
<div class="cnblogs_code">
<pre>export <span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
data() {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
share: {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 转发的标题 (默认标题)</span>
title: '默认标题--分享标题'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 默认是当前页面,必须是以‘/’开头的完整路径</span>
path: ''<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">自定义图片路径,可以是本地文件路径、代码包文件路径或者网络图片路径,</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">支持PNG及JPG,不传入 imageUrl 则使用默认截图。显示图片长宽比是 5:4</span>
imageUrl: ''<span style="color: rgba(0, 0, 0, 1)">
}
}
},
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 发送给朋友</span>
<span style="color: rgba(0, 0, 0, 1)"> onShareAppMessage(res) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
title: </span>'发送给朋友'<span style="color: rgba(0, 0, 0, 1)">,
path: </span>'/pages/test/test'<span style="color: rgba(0, 0, 0, 1)">
}
},
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">分享到朋友圈</span>
<span style="color: rgba(0, 0, 0, 1)"> onShareTimeline(res) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
title: </span>'分享到朋友圈'<span style="color: rgba(0, 0, 0, 1)">,
path: </span>'/pages/test/test'<span style="color: rgba(0, 0, 0, 1)">
}
}
}</span></pre>
</div>
<p>到次一个最基本的全局分享已经完成,细心的朋友可能会发现data里面的参数没有使用上,而且每一个分享出去的参数全部是固定的,不能动态的去配置,和理想中的全局分享差别是很大的</p>
<h3 class="md-end-block md-heading md-focus"><span class="md-plain md-expand">getCurrentPages()函数</span></h3>
<p class="md-end-block md-p md-focus"><span class="md-pair-s md-expand"><code> getCurrentPages()</code><span class="md-plain"> 函数用于获取当前页面栈的实例,以数组形式按栈的顺序给出,第一个元素为首页,最后一个元素为当前页面。</span></span></p>
<p class="md-end-block md-p"><span class="md-pair-s "><strong> 注意:</strong><span class="md-plain"> <span class="md-pair-s"><code>getCurrentPages()</code><span class="md-plain">仅用于展示页面栈的情况,请勿修改页面栈,以免造成页面状态错误。</span></span></span></span></p>
<p class="md-end-block md-p"><span class="md-plain"> 官网介绍:<span class="md-link md-pair-s">https://uniapp.dcloud.io/collocation/frame/window?id=getcurrentpages</span></span></p>
<h3 class="md-end-block md-heading md-focus"><span class="md-plain md-expand">优化onShareAppMessage分享给朋友</span></h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 发送给朋友</span>
<span style="color: rgba(0, 0, 0, 1)">onShareAppMessage(res) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 获取加载的页面</span>
let pages =<span style="color: rgba(0, 0, 0, 1)"> getCurrentPages(),
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 获取当前页面的对象</span>
view = pages;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">分享的页面路径</span>
<span style="color: rgba(0, 0, 255, 1)">this</span>.share.path = `/${view.route}`;
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">转发参数</span>
<span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.share;
},</span></pre>
</div>
<p class="md-end-block md-p"><span class="md-plain md-expand">动态获取页面路径,在分享出去。</span></p>
<p class="md-end-block md-p"><span class="md-plain md-expand">当下有一个比较明显的问题,小程序的标题目前没有方式直接获取。</span></p>
<h4 class="md-end-block md-heading"><span class="md-plain">设置页面分享标题</span></h4>
<p class="md-end-block md-p md-focus"><span class="md-plain"> 找到一个曲线救国的方法,在每一个页面需要分享的页面动态设置标题</span></p>
<div class="cnblogs_code">
<pre>export <span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
onLoad() {
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
在要分享的页面 生命周期中设计当前页面分享标题
this.share 为获取 wxShare.js中的定义的share数据
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">this</span>.share.title = "当前页面分享标题"<span style="color: rgba(0, 0, 0, 1)">
},
}</span></pre>
</div>
<h5 class="md-end-block md-heading md-focus"><span class="md-plain md-expand">效果展示</span></h5>
<p><img src="https://img2020.cnblogs.com/blog/2237618/202111/2237618-20211120142302885-978886273.png" alt="" loading="lazy"></p>
<p> <img src="https://img2020.cnblogs.com/blog/2237618/202111/2237618-20211120142314791-10681207.png" alt="" loading="lazy"></p>
<h4 class="md-end-block md-heading md-focus"><span class="md-plain md-expand">button分享到好友</span></h4>
<p class="md-end-block md-p"><span class="md-plain"> 页面中放置的分享按钮(<span class="md-pair-s"><code><button open-type="share"></code><span class="md-plain">)</span></span></span></p>
<p class="md-end-block md-p"><span class="md-plain"> 代码与上面并无区别,只是有一个单独的区域给配置参数。</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 发送给朋友</span>
<span style="color: rgba(0, 0, 0, 1)">onShareAppMessage(res) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 来自页面内的按钮的转发</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> (res.from == 'button'<span style="color: rgba(0, 0, 0, 1)">) {
console.log(</span>"按钮转发--配置"<span style="color: rgba(0, 0, 0, 1)">);
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 获取加载的页面</span>
let pages =<span style="color: rgba(0, 0, 0, 1)"> getCurrentPages(),
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 获取当前页面的对象</span>
view = pages;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">分享的页面路径</span>
<span style="color: rgba(0, 0, 255, 1)">this</span>.share.path = `/${view.route}`;
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">转发参数</span>
<span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.share;
}</span></pre>
</div>
<h3 class="md-end-block md-heading md-focus"><span class="md-plain md-expand">优化onShareTimeline分享到朋友圈</span></h3>
<p class="md-end-block md-p"><span class="md-plain"> 在配置上基本上与分享到好友一模一样</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">分享到朋友圈</span>
<span style="color: rgba(0, 0, 0, 1)">onShareTimeline(res) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 获取加载的页面</span>
let pages =<span style="color: rgba(0, 0, 0, 1)"> getCurrentPages(),
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 获取当前页面的对象</span>
view = pages;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> console.log("获取加载的页面", pages);</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">console.log("当前页面的对象", view);</span>
<span style="color: rgba(0, 0, 255, 1)">this</span>.share.path = `/${view.route}`;
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">转发参数</span>
<span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.share;
}</span></pre>
</div>
<p class="md-end-block md-p md-focus"><span class="md-plain">全局分享基本上配置就如上介绍。</span></p>
<p class="md-end-block md-p"><span class="md-plain">分享动态修改页面路径是没问题了,目前还有个问题动态分享路径加参数的配置这一块还是个问题。</span></p>
<h3 class="md-end-block md-heading"><span class="md-plain md-expand">wxShare.js代码</span></h3>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_dccc171d-a467-4be3-8d57-24e6892a3198" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_dccc171d-a467-4be3-8d57-24e6892a3198" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_dccc171d-a467-4be3-8d57-24e6892a3198" class="cnblogs_code_hide">
<pre>export <span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
data() {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
share: {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 转发的标题 (默认标题)</span>
title: '默认标题--分享标题'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 默认是当前页面,必须是以‘/’开头的完整路径</span>
path: ''<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">自定义图片路径,可以是本地文件路径、代码包文件路径或者网络图片路径,</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">支持PNG及JPG,不传入 imageUrl 则使用默认截图。显示图片长宽比是 5:4</span>
imageUrl: ''<span style="color: rgba(0, 0, 0, 1)">
}
}
},
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
在要分享的页面 生命周期中设计当前页面分享标题
onLoad() {
this.share.title = "当前页面分享标题"
},
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 发送给朋友</span>
<span style="color: rgba(0, 0, 0, 1)"> onShareAppMessage(res) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 来自页面内的按钮的转发</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> (res.from == 'button'<span style="color: rgba(0, 0, 0, 1)">) {
console.log(</span>"按钮转发--配置"<span style="color: rgba(0, 0, 0, 1)">);
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 获取加载的页面</span>
let pages =<span style="color: rgba(0, 0, 0, 1)"> getCurrentPages(),
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 获取当前页面的对象</span>
view = pages;
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.share.path = `/${view.route}`;
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">转发参数</span>
<span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.share;
},
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">分享到朋友圈</span>
<span style="color: rgba(0, 0, 0, 1)"> onShareTimeline(res) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 获取加载的页面</span>
let pages =<span style="color: rgba(0, 0, 0, 1)"> getCurrentPages(),
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 获取当前页面的对象</span>
view = pages;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> console.log("获取加载的页面", pages);</span>
console.log("当前页面的对象"<span style="color: rgba(0, 0, 0, 1)">, view);
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.share.path = `/${view.route}`;
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">转发参数</span>
<span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.share;
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">wxShare.js</span></div>
<p> </p>
</div>
<div id="MySignature" role="contentinfo">
<p>本文来自博客园,作者:虚乄,转载请注明原文链接:https://www.cnblogs.com/lovejielive/p/15581174.html</p><br><br>
来源:https://www.cnblogs.com/lovejielive/p/15581174.html
頁:
[1]