詳解封裝微信小程序組件及小程序坑(附帶解決方案)

####1、序vue

  上一篇介紹瞭如何從零開發微信小程序,博客園審覈變智障了,每次代碼都不算篇幅,好好滴一篇原創,不到3分鐘從首頁移出來了。這篇介紹一下組件封裝和個人踩坑歷程。java

####2、封裝微信小程序可複用組件react

  首先模塊化的思想是通用的,在這不作過多解釋了。直接上代碼,而後解釋代碼:web

// wxml
<view class="c-menu">
  <view wx:for="{{menuList}}" wx:key="{{item}}" class="menuItem">
    <navigator url="/pages/my{{item.path}}" class="navigator">
      <image class="imgIcon" src="{{item.icon}}"></image>
      <view class="navigator-text" data-id="{{item.key}}" bindtap="handleMenuTap">{{item.name}}</view>
    </navigator>
    <image class="imgGo" src="../../image/youxiang.png"></image>
  </view>
</view>



// js
Component({
  properties: {
    menuList: {    // 菜單列表
      type: Array,
      value: [],
    },
    menuEvent: {    // 菜單點擊的自定義事件名稱
      type: String,
      value: '',
    },
  },
  data: {
  },
  ready: function () {

  },
  methods: {
    handleMenuTap:function () {
      const { menuEvent } = this.data
      if (menuEvent) this.triggerEvent(menuEvent, {})
    }
  }
})


//json 
{
  "component": true
}

//wxss
.c-menu{
  width: 100%;
  background-color: white;
  margin-top: 10px;
}
.menuItem{
  position: relative;
  box-sizing: border-box;
}
.navigator-text{
  padding-left: 65px;
}
.navigator{
  position: relative;
  box-sizing: border-box;
  width: 100%;
  height: 60px;
  line-height: 60px;
  border-bottom: 2px solid #F7F7F7;
}
.imgGo{
  position: absolute;
  width: 18px;
  height: 18px;
  top: 22px;
  right: 15px;
}
.imgIcon{
 position: absolute;
 width: 29px;
 height: 29px;
 top: 15px;
 left: 18px;
}
複製代碼

首先介紹思路:面試

    這是一個簡單菜單組件;輸入菜單數據 menuList , 暴露出 菜單點擊事件的回調 menuEvent。npm

  而後介紹一下小程序封裝組件的特殊之處:json

    一、json 配置文件須要配置 "component": true , 表名這是個組件gulp

    二、js 裏面使用 Component({})方法構造組件小程序

    三、properties 組件接收的屬性在這裏面聲明,包括數據類型和默認值微信小程序

    四、生命週期一般用 ready 表明其準備完畢。

  最後介紹一下組件使用的方法:

    一、在要用組件的json文件

        "usingComponents": {           "menu": "/components/menu/index"          }     二、在wxml裏面使用,並準備好組件須要的數據         

     這就是微信小程序封裝組件的大體流程。大同小異,只是給你們說一下他特殊的地方而已

3、小程序的坑——小程序與其餘web應用的不一樣之處 ps: 這裏只描述問題,並提供解決問題的方法,詳細的瞭解請查官方文檔

  一、問題: map 等原生組件的覆蓋問題。 在小程序裏面,原生組件默認展現層級最該,也就是video、map等組件會覆蓋咱們的標籤,即使是定位調節 z-index 什麼的都沒用

    解決:用 cover-view cover-image 包裹內容,就能夠覆蓋在原生組件之上了。注意 這2個標籤內容不能嵌套view等標籤,具體使用,請看官方文檔。

  二、問題:wxss 沒法使用本地資源,即 background-image 不能直接使用相對路徑展現圖片。

    解決:將圖片轉成base64展現,或者不使用背景圖,直接使用圖片。例: background-image: url("base64: .......")

  三、問題:大多數 js 插件沒法使用

    緣由:小程序用的是不完整的瀏覽器對象,大多數 BOM DOM 對象的api沒法使用,故:沒辦法的事情

  四、問題:使用npm包費勁

    解決:請看我上一篇博客,詳解微信小程序開發

  五、問題:只支持到ES6,不支持ES7。像 async 等這些東西都用不了。

    解決:這個比較蛋疼了。(1)這裏只提供解決的思路。引入 regenerator 這個包 ,或者其餘包都行。(2)開發環境本身搭建gulp打包環境,本身把js代碼轉ES5,注意關閉小程序自帶的轉換。

  六、問題:獲取用戶信息改版了,wx.authorize 等api很差使

    解決:如今必須用button按鈕

  七、問題:wx.request 請求,沒法攜帶cookie,或者每次請求攜帶的都不同

    解決:

header: {
              'content-type': 'application/json',
              'cookie': wx.getStorageSync("cookie")
            },
            success: function (res) {
             
                if (url === '/api/cdz/user/weixin/login') {
                  const cookie = res.header["set-cookie"];
                  if (cookie) wx.setStorageSync("cookie", cookie);
                }
                resolve(res.data);
            },
            fail: function (res) {
              // fail調用接口失敗
              if (url === '/api/cdz/user/weixin/login') {
                const cookie = res.header["set-cookie"];
                if (cookie) wx.setStorageSync("cookie", cookie);
              }
              reject({ error: '網絡錯誤', code: 0 });
            }
複製代碼

 八、問題:map 組件的使用,map是騰訊地圖,和 百度、高德什麼的,這些地圖座標系不一樣,經緯度的相互使用須要轉化

    解決:用這個包 coordtransform 包很小,用法很簡單

  九、問題:小程序僞類 :active 不支持

    解決:view、button、navigator 這3個支持 hover-class 屬性,用法和 active 同樣

  十、問題:上述問題,平時好用,可是若是按鈕在原生組件上面的話,又很差使了

    解決:cover-view 沒法嵌套普通標籤。他又不支持 hover-class,因此只能js+wxss,本身寫按鈕激活事件了

  十一、問題:小程序的事件點擊不容許傳參數。GoMy沒法像vue react之類的同樣寫箭頭函數直接傳參

           解決:經過data-id這個屬性綁定關鍵參數,觸發函數再去取出來

有興趣的能夠加羣交流技術【Android技術交流】:jq.qq.com/?_wv=1027&a…。進羣 免費領取安卓進階學習視頻,源碼,面試資料,羣內有大牛一塊兒交流討論技術;點擊連接加入羣聊(包括java基礎與原理,自定義控件、NDK、架構設計、混合式開發(Flutter,Weex)、性能優化、完整商業項目開發等)
相關文章
相關標籤/搜索