編程學習網 > 小程序 > 微信小程序開發(fā)一周總結
2016
11-28

微信小程序開發(fā)一周總結

編輯器

我直接用 vscode(其它編輯器同理,預覽還是用的微信開發(fā)工具),語法高亮將 wxml 設置成 html, wxss 設置成 css

"files.associations": {
  "*.wxss": "css",
  "*.wxml": "html"
}

也可以安裝小程序相關插件

開始寫代碼

  • 首先需要完整看完微信小程序文檔(框架,組件和 API),方便后面用到時查找。

  • view 組件對應 html 里的 div

  • text 對應 span

  • wxss 里選擇器只支持 element, #id, .className, ::after, ::before

公用組件

項目目錄里新建 components ,按類似 pages 目錄結構,將每個組件的模板,樣式和 js 文件放在同一個文件夾

  • 模板可以直接 <include/> 或者需要傳值的使用 <import/> + <template></template>

  • 樣式使用 @import 導入

  • js 使用 require 引入到頁面,然后使用下面的 mergePage 來加載到頁面對象中。

    <!--more-->

mergePage

  • 組件的加載

const ErrorMsg = require('../../../components/error-msg/error-msg');
Page(util.mergePage({
  // 頁面 Page 方法...
  onLoad() {
    // 可以直接在頁面方法中調用 showErrorMsg 方法
  }
}, ErrorMsg/* 更多組件也可以*/));

使用 mergePage 方法將所有組件方法及頁面事件注冊到頁面對象

  • 組件的編寫方式

var errorTimer;

module.exports = {
  showErrorMsg(msg, cb) {
    clearTimeout(errorTimer);
    this.setData({
      errorMsg: msg
    });
    errorTimer = setTimeout( () => {
      this.setData({
        errorMsg: false
      });
      cb && cb();
    }, 2000);
  }
  // 可以在這里注冊 `onLoad`,`onShow`等頁面事件
}

組件里使用可以 this.setData 來更新頁面數據,或者注冊 onLoad , onShow 等頁面事件, mergePage 的最后一個參數的事件會最先調用。

  • mergePage 的源碼

/**
 * 合并 Page 對象所有的方法及事件
 * 子對象不能使用 data 屬性,請在 onLoad 中使用 setData 方法設置
 */
function mergePage(dest, ...src) {
  let args = arguments;
  let eventsStack = {
    onLoad: [],
    onReady: [],
    onShow: [],
    onHide: [],
    onUnload: [],
    onPullDownRefresh: [],
    onReachBottom: [],
  };
  // 保存所有的事件,最后一個參數的事件會最先調用。
  for(let name in eventsStack) {
    for(let i = args.length - 1; i >= 0; i--) {
      args[i][name] && eventsStack[name].push(args[i][name])
    }
  }
  Object.assign(...args);
  for(let name in eventsStack) {
    dest[name] = function() {
      for(let i = 0; i < eventsStack[name].length; i++) {
        eventsStack[name][i].apply(this, arguments);
      }
    }
  }
  return dest;
}

es 6

箭頭函數,函數參數默認值及解析構

wx.request({
  complete: ({data= {}}) => {
    // 1. 因為 wx.request 返回的接口數據是在 data 屬性里,這里我們只要 data 屬性就行了,所以直接參數解析構
    // 2. 如果 failed,無 data 時,data 將為默認值 {}
    if(data.code !== 0) {
      // do something if request failed
      return;
    }
    // 請求正常處理代碼
    // 3. 因為用的箭頭函數,回調里可以正常使用 this, 訪問 Page 對象的方法
    // 比如 this.setData(...)
  }
})

一些函數參數也可以直接使用默認參數。

拓展運算符 和 對象屬性簡寫

在給 template 傳 data 參數時,可以使用對象屬性簡寫,如

<template is="..." data="{{...obj, id: otherIdVariable, name}}"></template>

這樣 template 中可以使用變量為 obj 對象的所有 key,以及 id 和 name

模板字符串

小程序里可以直接方便的使用 es 6 模板字符串

let url = `${app.globalData.API_PREFIX}/cart/add`;

更多 es 6 特性

其它注意

  • wx.showToast 圖標只支持"success"、"loading",錯誤提示得自定義

  • 如果 template 里面的變量沒值,請看 data 傳進來沒有。

  • 開發(fā)工具(v0.10.102800)可以用下面方法添加接口請求域名,遺憾的是微信里不行。

// 放到 app.js 前面
 __wxConfig.projectConfig.Network.RequestDomain.push('https://weapp.juanpi.com');
  • 所有頁面的 JS 會在啟動時立即執(zhí)行,而不是打開頁面才執(zhí)行,所以一些寫在全局的代碼應該盡量放到 onLoad 之后,下面是從調試 source 里看到加載的代碼:

define("pages/index/index.js", function(require, module, exports, window,document,frames,self,location,navigator,localStorage,history,Caches,screen,alert,confirm,prompt,XMLHttpRequest,WebSocket ){ 'use strict';

var app = getApp();

var util = require('../../../utils/util');
var ErrorMsg = require('../../../components/error-msg/error-msg');
var AddressPicker = require('../../../components/address-picker/address-picker');

Page(util.mergePage({
  // 頁面代碼省略
}, AddressPicker, ErrorMsg));
//# sourceMappingURL=data:application/json;...
});require("pages/index/index.js")

參考

 

來自:https://segmentfault.com/a/1190000007468931

 

掃碼二維碼 獲取免費視頻學習資料

Python編程學習

查 看2022高級編程視頻教程免費獲取