微信小程式開發一週總結

Y2J
發布: 2017-04-18 10:50:15
原創
2222 人瀏覽過

以下是微信小程式開發一週總結,希望對php中文網的同學有幫助。

編輯器

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

"files.associations": {
  "*.wxss": "css",
  "*.wxml": "html"
}
登入後複製

# 也可以安裝小程式相關外掛程式

開始寫程式碼

  • ##首先需要完整看完微信小程式文件(

    框架

    ,元件和
  • API
),方便後面用到時尋找。

view 元件對應html 裡的p

text 對應span

微信小程式開發一週總結wxss 裡選擇器只支援element, #id, .className, ::after, ::before

  • #公用元件

    ##項目目錄裡新建components ,按類似pages
  • 目錄結構
  • ,將每個元件的模板,樣式和js 檔案放在同一個資料夾

    ##模板可以直接 或需要傳值的使用 +

#樣式使用@import 導入

js 使用
    require
  • 引入到頁面,然後使用下面的mergePage 來載入到頁面

    物件

#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",錯誤提示得自訂開發工具(v0.10.102800)可以用下面方法加入介面請求域名,遺憾的是微信裡不行。 #########
// 放到 app.js 前面
 wxConfig.projectConfig.Network.RequestDomain.push('https://weapp.juanpi.com');
登入後複製
### ############所有頁面的JS 會在啟動時立即執行,而不是開啟頁面才執行,所以有些寫在全域的程式碼應該盡量放到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")
登入後複製

以上是微信小程式開發一週總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!