中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

小程序如何分享鏈接onShareAppMessage

發布時間:2020-07-22 15:32:49 來源:億速云 閱讀:791 作者:小豬 欄目:web開發

小編這次要給大家分享的是小程序如何分享鏈接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&#63;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&#63;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&#63;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的文章,如果覺得文章內容寫得不錯的話,可以把它分享出去給更多人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

北京市| 城步| 开江县| 星座| 平陆县| 陕西省| 正宁县| 余江县| 平潭县| 湄潭县| 垣曲县| 深圳市| 台南市| 淳安县| 慈利县| 和政县| 赞皇县| 韶关市| 马山县| 江安县| 绿春县| 清水河县| 平阳县| 鄂尔多斯市| 宁海县| 五常市| 闸北区| 房产| 精河县| 巴塘县| 腾冲县| 胶南市| 黄冈市| 固安县| 新田县| 正镶白旗| 博乐市| 广元市| 望江县| 株洲县| 图木舒克市|