1. 程式人生 > >mpvue小程式以及微信直播踩坑總結

mpvue小程式以及微信直播踩坑總結

前段時間剛寫完一個mpvue的小程式,現在得閒必須趕緊記錄和總結一下,不然很多東西又要忘了

我是比較熟悉vue的語法,但是也猶豫過是用原生還是用mpvue,因為那時候原生小程式已經相當成熟而mpvue才剛出來(踩坑和填坑的前人還很少)

所以我學習了幾天原生的框架和語法,果斷選擇了mpvue,真的是沒有對比就沒有傷害,對比原生體驗不要太好

mpvue是一個使用 Vue.js 開發小程式的前端框架,他是將我們寫的vue檔案重新編譯成wxml等檔案,最後的底層實現還是用的小程式語法,所以原生小程式語法也是比較重要的,而且像很多下拉重新整理,到底部請求下一頁什麼的等等很多地方也是要用到小程式api的,所以建議大家在入坑之前還是瞭解一些小程式語法比較好

專案配置

使用官方的5分鐘上手,生成一個基本框架,後來開發也沒有手動修改過他的配置

用到了4個外掛

mpvue-weui    ui庫,相當方便輕量好使

mpvue-toast  一個基於mpvue的簡單彈窗元件

因為mpvue目前還不支援全域性的元件,所以沒有辦法像vue元件引入一次就能在所有頁面使用,但是mpvue團隊已經在考慮新增全域性元件功能了

github地址:https://github.com/linrui1994/mpvue-toast 

sass  不多介紹

全域性安裝:npm install sass-loader node-sass --save-dev 

在style節點加上lang=”scss”,這樣就可以愉快地使用sass進行開發了

mpvue-router-patch   在mpvue 中使用 vue-router 相容的路由寫法

當知道mpvue不支援vue-router的時候我還是非常難受,還好mpvue團隊後面釋出了這個外掛,非常簡單好用

github地址:https://github.com/F-loat/mpvue-router-patch

接下來的3個外掛我沒有用過但是和mpvue-router-patch一樣是mpvue團隊釋出的,感覺應該也不差,也推薦給大家如果需要可以花時間瞭解一下

mpvue-echarts    適用於 Mpvue 的 ECharts 元件

github地址:https://github.com/F-loat/mpvue-echarts

微信小程式富文字解析元件  適用於 Mpvue 的微信小程式富文字解析自定義元件

github地址:https://github.com/F-loat/mpvue-wxParse

mpvue-entry自動生成各頁面的入口檔案  集中式頁面配置,自動生成各頁面的入口檔案,優化目錄結構,支援新增頁面熱更新

github地址:https://github.com/F-loat/mpvue-entry

ajax請求封裝

let urlPath = '' // 專案的域名
export function post(url, data) {
  wx.showLoading({
    title: '努力載入中',
  })
// 由於微信不會儲存後端用於登陸驗證的cookie,這裡需要自己從登陸返回的資料裡取到cookie,然後本地快取,請求時在header裡帶上cookie
  let header = {} 
  url === 'user/loginworker' // 通過傳進來的url判斷是否是登陸頁
    ? header = {} 
    : header = {
      'content-type': 'application/x-www-form-urlencoded',
      'cookie': wx.getStorageSync("sessionid")
    } 
  return new Promise((resolve, reject) => {
    wx.request({
      url: urlPath + url,
      data: data,
      method: 'get',
      header: header, success(res) {
        console.log(res)
        if (res.statusCode === 200) {
          if (res.data === 9999) { // 後端返回9999表示cookie失效
            wx.showModal({
              content: '登陸超時請重新登陸',
              showCancel: false,
              success: function (res) {
                if (res.confirm) {
                  wx.navigateTo({
                    url: '../../pages/login/main',
                  })
                }
              }
            })
          } else if (res.data.code && res.data.code !== 200) { // 若返回coode碼且不等於200表示傳入引數有問題
            res.message = res.data.message, reject(res)
          } else resolve(res)
            // 儲存cookie
          res.data.message === '登入成功。' ? wx.setStorageSync("sessionid", res.header["Set-Cookie"]) : ""
        }else {
          res.message = '伺服器錯誤請求失敗'
          reject(res)
        }
        wx.hideLoading()
      }, fail(err) {
        err.message = '請求超時請稍後再試'
        reject (err)
        wx.hideLoading()
      }
    })
  })
}

生命週期鉤子

created是vue的生命週期在mpvue裡所有頁面的created函式會在專案載入的時候被一起呼叫,可用性不大,可以使用onShow()代替,但是onShow()只有在隱藏又顯示後才會顯示,也就是第一次載入不會執行

 created() {
    console.log('created')
  },
  mounted() {
    console.log('mounted')
  },
  onLoad() {
    console.log('onLoad')
  },
  onShow() {
    console.log('onShow')
  },
  onUnload() {
    console.log('onUnload')
  },
  onHide() {
    console.log('onHide')
  },

頁面跳轉後並沒有銷燬頁面例項

比如一個搜尋頁面,頁面第一次進來所有的資料都是空的,但你搜索一次之後,input框就有值了,這個時候再跳轉到其他頁面或者返回之後再進入這個頁面那個值依然存在,頁面跳轉後並沒有銷燬頁面例項,而是將其推入頁面棧中,所以會儲存之前的舊的資料,目前為止看到的比較統一的解決辦法就是:在onShow()或者onLoad()手動清空

關於微信直播

這個小程式需要引入監控相當於是直播功能,這個元件也是有點坑

Live-player元件本身只能播放,如果想要在元件上加功能,像什麼全屏靜音播放暫停之類的功能需要使用wx.createLivePlayerContext()方法,而且由於live-player層級是最高的,如果你需要在元件上加功能比如點一下全屏再點下退出全屏或者加css樣式,你必須寫在 cover-view cover-image上面,直接加在live-player上是沒用的

<live-player id='liveInfo' src="" mode="live" autoplay='false' @bindstatechange="statechange" binderror="error">
    <cover-image @click="requestFullScreen"></cover-image>
</live-player>

你以為這樣就完了嘛,不,如果你有一個直播列表,比如一個螢幕同時有一個以上的live-player元件那麼你全屏的時候就會發現其餘的元件因為層級的原因全部覆蓋在你全屏的那個元件之上

解決辦法:全屏是v-if隱藏其餘的元件,退出時再顯示

若對你有幫助或喜歡本文請點贊 o( ̄▽ ̄)d
如有不足、需要改善或者還能優化的地方歡迎指出不勝感激,歡迎留言交流  (´▽`ʃ♡ƪ)

相關推薦

mpvue程式以及直播總結

前段時間剛寫完一個mpvue的小程式,現在得閒必須趕緊記錄和總結一下,不然很多東西又要忘了 我是比較熟悉vue的語法,但是也猶豫過是用原生還是用mpvue,因為那時候原生小程式已經相當成熟而mpvue才剛出來(踩坑和填坑的前人還很少) 所以我學習了幾天原生的框架和語法,果

使用mpvue開發微程式——原生程式mpvue、wepy對比

mpvue是什麼?為什麼使用它? 目前小程式開發主要有三種形式:原生、wepy、mpvue,其中wepy是騰訊的開源專案;mpvue是美團開源的一個開發小程式的框架,全稱mini program vue(基於vue.js的小程式),vue開發者使用了這個框架後,開發小程式的效率將得到

程式登陸 —— 程式教程系列(20)

簡介: 微信登陸,在新建一個微信小程式Hello World專案的時候,就可以看到專案中出現了我們的微信頭像,其實這個Hello World專案,就有一個簡化版的微信登陸。只不過是,還沒有寫入到咱們自家的後臺中而已。 新建一個Hello World專案,找到a

Okam(奧卡姆):程式開發框架,支援百度程式程式、支付寶程式

Okam(奧卡姆):小程式開發框架,支援百度小程式、微信小程式、支付寶小程式 Okam 是什麼 `Okam` 一個面向小程式開發的開發框架,開發體驗類 `Vue`。詳情 Okam 對各小程式的支援情況 支援 百度小程式 支援 微信小程式 支援 支付寶小程式 Okam 提供

程式-day02-程式-框架-配置-pages、windows、tabBars、debug(json檔案)

1.pages(頁面路徑列表) "pages":[ "pages/index/index", "pages/do/do", "pages/eat/eat", "pages/logs/logs" ] 2.windows(全域性的預設視窗表現) "window":{

3分鐘實現程式喚起支付 Laravel教程

微信支付的接入,如果不使用成熟的開發包,將是巨大的工作量。 依賴 EasyWechat 先在 laravel 專案中依賴 easywechat 這個包 composer require "overtrue/laravel-wechat":"^4.0" 配置 在 .env 中新增微信支付的 key 配置

淺談支付寶程式程式開發的區別

淺談支付寶小程式與微信小程式開發的區別 一、app.json (1)設定小程式通用的的狀態列、導航條、標題、視窗背景色 支付寶小程式 "window": { "defaultTitle": "病案到家", //頁面標題 "titleBarColor": "#1

程式日記-支付提示201商戶訂單號重複

微信支付有2個步驟: 1. 預下單,提供幾個引數(openid,訂單內容,訂單號,總價),預下單成功後獲得預下單號 2.再用預下單號和訂單號真正進行支付。 如果你用了相同的訂單號,但是訂單內容和總價不一樣。則會提醒201商戶訂單號重複. 如果訂單號,內容總價都一樣, 微信會檢查是否已經成功支付,會提醒

程式API—程式開發工具

為了讓開發者可以很方便的調起微信提供的能力,例如獲取使用者資訊、微信支付等等,小程式提供了很多 API 給開發者去使用。 要獲取使用者的地理位置時,只需要: wx.getLocation({ type: ‘wgs84’, success: (re

-齊梟飛前端架構師 程式--仿 QQ左劃事件--

廢話不多說,直接上程式碼: js: var app = getApp() Page({ data: { items: [], startX: 0, //開始座標 startY: 0 }, onLoad: func

百度智慧程式擊中軟肋:流量要多更要精

最近幾個月,小程式領域可謂是訊息不斷。此前今日頭條小程式開啟內測引起一陣騷動後,9月25日,百度舉辦了一場智慧小程式媒體溝通會,宣佈智慧小程式將全面開放申請,幾乎所有小程式開發者們都興奮起來,BAT小程式實質之戰也一觸即發。 作為一個在公測期打造了多個成功案例的生態,很

程式支付C#後臺(統一下單)

#region 生成簽名 /// <summary> /// 獲取簽名資料 ///</summary> /// <param name="strParam"></param> /// <param name="key"></par

程式獲取登陸使用者

傳統的小程式微信登陸 小程式利用雲開發微信登陸 雲開發可以自動實現使用者登入的校驗,開發者無需再次校驗使用者身份,直接通過雲函式的 event.userInfo.openId 即可獲取到使用者資訊。直接呼叫資料庫 、檔案儲存 API 時,也會自動關聯到使用者對應的 o

程式公眾號客服轉私人訊號,實現24小時客服線上

    現在不少企業都有自己的微信公眾號、服務號、小程式,其中也添加了客服功用。     但據所知,官方提供的僅是網頁版的客服系統,我們的客服人民必須開啟網頁進行“守候”。     我們為什麼不能將

程式實現支付

【微信支付】 /* 微信支付 */ wxpay: function () { var that = this //登陸獲取code wx.login({ success: function (res) { consol

程式使用元件swiper實現中間大圖另外兩張

效果實現思路 使用微信元件swiper swiper元件api previous-margin、next-margin 屬性名 型別 預設值 型別說明

程式呼叫支付

1,首先我們先縷清支付的整個流程,詳見https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_4&index=3,第一步在自己的伺服器上吊起微信支付,獲取預支付訂單id,第二步根據獲取得APPID、隨機數、預支付訂單prepay

程式獲得頭像和暱稱

{ wx.getSetting({ success: res =&gt; { if (res.authSetting &amp;&amp; res.authSetting['scope.userInfo']) { // 已經授

程式程式掉進的之與後臺資料互動

一、與後臺的資料互動 注:服務端語言為Java. 在進行資料互動時,用的是Servlet進行資料的獲取和回傳。 在小程式中提交引數時需要在header寫入 header: {

程式公眾號、H5之間相互跳轉

轉自慕課網 一、小程式和公眾號答案是:可以相互關聯。在微信公眾號裡可以新增小程式。圖片有點小,我把文字打出來吧:可關聯已有的小程式或快速建立小程式。已關聯的小程式可被使用在自定義選單和模版訊息等場景中。公眾號可關聯同主體的10個小程式及不同主體的3個小程式。同一個小程式可關聯