您好,登錄后才能下訂單哦!
小編這次要給大家分享的是小程序如何分享鏈接onShareAppMessage,文章內容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。
onShareAppMessage用法:
只需要在button標簽中加入open-type="share",小程序ui就會自動識別分享鏈接功能
<button data-name="shareBtn" open-type="share">分享</button>
js中代碼如下:
onShareAppMessage: function( options ){ var that = this; // 設置菜單中的轉發按鈕觸發轉發事件時的轉發內容 var shareObj = { title: "轉發的標題", // 默認是小程序的名稱(可以寫slogan等) path: '/pages/share/share', // 默認是當前頁面,必須是以‘/'開頭的完整路徑 imageUrl: '', //自定義圖片路徑,可以是本地文件路徑、代碼包文件路徑或者網絡圖片路徑,支持PNG及JPG,不傳入 imageUrl 則使用默認截圖。顯示圖片長寬比是 5:4 success: function(res){ // 轉發成功之后的回調 if(res.errMsg == 'shareAppMessage:ok'){ } }, fail: function(){ // 轉發失敗之后的回調 if(res.errMsg == 'shareAppMessage:fail cancel'){ // 用戶取消轉發 }else if(res.errMsg == 'shareAppMessage:fail'){ // 轉發失敗,其中 detail message 為詳細失敗信息 } }, complete: fucntion(){ // 轉發結束之后的回調(轉發成不成功都會執行) } }; // 來自頁面內的按鈕的轉發 if( options.from == 'button' ){ var eData = options.target.dataset; console.log( eData.id); // shareBtn // 此處可以修改 shareObj 中的內容 shareObj.path = '/pages/goods/goods?goodId='+eData.id; } // 返回shareObj return shareObj; }
在實際應用中,會碰到這種情況:
微信小程序分享時,需要調用一個ajax(Promise)請求,然后return 一個對象,怎么同步實現?
比如:微信小程序分享時會調用 onShareAppMessage 方法,他會return 一個對象作為分享時的參數。但是我需要在他return之前調用一個ajax方法getShareCode,怎么樣同步實現?
//將字符串鏈接轉為二維碼,如:轉換前 itemid/344*fromuser/4909*shopid/75,轉換后 KtIQE4j9OP4JNGS2dsZy getShareCode: function () { var that = this; util.request(api.CreateShareCode, { sharecode: 'itemid/' + that.data.productid + '*fromuser/' + user.getBuyerUserId() + '*shopid/' + that.data.shopId }).then(function (res) { if (res.statusCode === 0) { that.setData({ newShareCode: res.sharedata }); } }); }, //分享功能 onShareAppMessage: function () { this.getShareCode(); let that = this; var newShareCode = that.data.newShareCode; var shareBackUrl = 'pages/goods/goods?scene=' + newShareCode; return { title: that.data.goods.title, path: shareBackUrl } },
嘗試用async await 和 Promise都沒有得到想要的結果。
不能用async await原因是, 如果 onShareAppMessage 是async函數,分享時會調用這個方法,但是分享的事件是走的默認的分享,沒用使用我return的參數對象。Promise同理。
而且return的對象寫到請求方法里面也會出現上面的問題:方法會被調用,但是分享事件沒有用return的參數。如下:
//分享功能 onShareAppMessage: function () { var that = this; util.request(api.CreateShareCode, { sharecode: 'itemid/' + that.data.productid + '*fromuser/' + user.getBuyerUserId() + '*shopid/' + that.data.shopId }).then(function (res) { if (res.statusCode === 0) { var newShareCode = res.sharedata; var shareBackUrl = 'pages/goods/goods?scene=' + newShareCode; return { title: that.data.goods.title, path: shareBackUrl } } }); },
jQuery的ajax請求可以這么設置同步請求:
$.ajaxSetup({ async: false });
async 方法,別人調用的時候,會立刻返回一個Promise,而return里的path,則是在返回的那個getShareCode里獲取的。微信調用這個方法拿的是返回值,也就是一個Promise,而Promise里沒有他需要的那些參數,所以就是默認的分享了。
換句話說,這個Share回調不允許有異步操作。能改成同步就改,不能改的話,就得改代碼邏輯了。
結果發現這個Share回調還真不允許有異步操作。
曲線救國的方法就多了,比如:
1、在頁面加載的時候先請求好數據,存在data里
2、寫個阻塞的函數
3、封裝自己的分享函數onShareAppMessage實現分享參數的動態獲取
看完這篇關于小程序如何分享鏈接onShareAppMessage的文章,如果覺得文章內容寫得不錯的話,可以把它分享出去給更多人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。