摘要:編輯器我直接用其它編輯器同理,預(yù)覽還是用的微信開發(fā)工具,語(yǔ)法高亮將設(shè)置成設(shè)置成也可以安裝小程序相關(guān)插件開始寫代碼首先需要完整看完微信小程序文檔框架,組件和,方便后面用到時(shí)查找。
編輯器
我直接用 vscode(其它編輯器同理,預(yù)覽還是用的微信開發(fā)工具),語(yǔ)法高亮將 wxml 設(shè)置成 html, wxss 設(shè)置成 css
"files.associations": { "*.wxss": "css", "*.wxml": "html" }
也可以安裝小程序相關(guān)插件
開始寫代碼首先需要完整看完微信小程序文檔(框架,組件和 API),方便后面用到時(shí)查找。
view 組件對(duì)應(yīng) html 里的 div
text 對(duì)應(yīng) span
wxss 里選擇器只支持 element, #id, .className, ::after, ::before
公用組件項(xiàng)目目錄里新建 components ,按類似 pages 目錄結(jié)構(gòu),將每個(gè)組件的模板,樣式和 js 文件放在同一個(gè)文件夾
模板可以直接
樣式使用 @import 導(dǎo)入
js 使用 require 引入到頁(yè)面,然后使用下面的 mergePage 來(lái)加載到頁(yè)面對(duì)象中。
組件的加載
const ErrorMsg = require("../../../components/error-msg/error-msg"); Page(util.mergePage({ // 頁(yè)面 Page 方法... onLoad() { // 可以直接在頁(yè)面方法中調(diào)用 showErrorMsg 方法 } }, ErrorMsg/* 更多組件也可以*/));
使用mergePage方法的優(yōu)點(diǎn)是可以將所有組件方法及頁(yè)面事件注冊(cè)到頁(yè)面對(duì)象
組件的編寫方式
var errorTimer; module.exports = { showErrorMsg(msg, cb) { clearTimeout(errorTimer); this.setData({ errorMsg: msg }); errorTimer = setTimeout( () => { this.setData({ errorMsg: false }); cb && cb(); }, 2000); } // 可以在這里注冊(cè) `onLoad`,`onShow`等頁(yè)面事件 }
組件里使用可以 this.setData 來(lái)更新頁(yè)面數(shù)據(jù),或者注冊(cè) onLoad,onShow等頁(yè)面事件,mergePage 的最后一個(gè)參數(shù)的事件會(huì)最先調(diào)用。
mergePage 的源碼
/** * 合并 Page 對(duì)象所有的方法及事件 * 子對(duì)象不能使用 data 屬性,請(qǐng)?jiān)?onLoad 中使用 setData 方法設(shè)置 */ function mergePage(dest, ...src) { let args = arguments; let eventsStack = { onLoad: [], onReady: [], onShow: [], onHide: [], onUnload: [], onPullDownRefresh: [], onReachBottom: [], }; // 保存所有的事件,最后一個(gè)參數(shù)的事件會(huì)最先調(diào)用。 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); // Object.assign 需要添加 polyfill 兼容 Android(不支持?jǐn)?shù)組參數(shù)展開) Object.assign.apply(null, 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; }Object.assign Android 上兼容問題
小程序里在 Android 上沒有 Object.assign 這個(gè),除了上面的 mergePage,其它地方也會(huì)經(jīng)常用到。
我們可以到 app.js 里檢測(cè)是否支持,然后添加 polyfill
// polyfill for Android before app starts if(!Object.assign) { Object.assign = require("./utils/object-assign") }
utils/object-assign.js 源碼
// https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign module.exports = function (target) { // We must check against these specific cases. if (target === undefined || target === null) { throw new TypeError("Cannot convert undefined or null to object"); } var output = Object(target); for (var index = 1; index < arguments.length; index++) { var source = arguments[index]; if (source !== undefined && source !== null) { for (var nextKey in source) { if (source.hasOwnProperty(nextKey)) { output[nextKey] = source[nextKey]; } } } } return output; };es 6 應(yīng)用 箭頭函數(shù),函數(shù)參數(shù)默認(rèn)值及解析構(gòu)
wx.request({ complete: ({data= {}}) => { // 1. 因?yàn)?wx.request 返回的接口數(shù)據(jù)是在 data 屬性里,這里我們只要 data 屬性就行了,所以直接參數(shù)解析構(gòu) // 2. 如果 failed,無(wú) data 時(shí),data 將為默認(rèn)值 {} if(data.code !== 0) { // do something if request failed return; } // 請(qǐng)求正常處理代碼 // 3. 因?yàn)橛玫募^函數(shù),回調(diào)里可以正常使用 this, 訪問 Page 對(duì)象的方法 // 比如 this.setData(...) } })
一些函數(shù)參數(shù)也可以直接使用默認(rèn)參數(shù)。
拓展運(yùn)算符 和 對(duì)象屬性簡(jiǎn)寫在給 template 傳 data 參數(shù)時(shí),可以使用對(duì)象屬性簡(jiǎn)寫,如
這樣 template 中可以使用變量為 obj 對(duì)象的所有 key,以及 id 和 name
模板字符串小程序里可以直接方便的使用 es 6 模板字符串
let url = `${app.globalData.API_PREFIX}/cart/add`;更多 es 6 特性
請(qǐng)參考:https://uedsky.com/2016-06/es6/
其它注意wx.showToast 圖標(biāo)只支持"success"、"loading",錯(cuò)誤提示得自定義
如果 template 里面的變量沒值,請(qǐng)看 data 傳進(jìn)來(lái)沒有。
開發(fā)工具(v0.10.102800)可以用下面方法添加接口請(qǐng)求域名,遺憾的是微信里不行。
// 放到 app.js 前面 __wxConfig.projectConfig.Network.RequestDomain.push("https://weapp.juanpi.com");
所有頁(yè)面的 JS 會(huì)在啟動(dòng)時(shí)立即執(zhí)行,而不是打開頁(yè)面才執(zhí)行,所以一些寫在全局的代碼應(yīng)該盡量放到 onLoad 之后,下面是從調(diào)試 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({ // 頁(yè)面代碼省略 }, AddressPicker, ErrorMsg)); //# sourceMappingURL=data:application/json;... });require("pages/index/index.js")參考
https://mp.weixin.qq.com/debu...
原文地址:https://uedsky.com/2016-11/weixin-app/
獲取最佳閱讀體驗(yàn)并參與討論,請(qǐng)?jiān)L問原文
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/80883.html
摘要:微信小程序應(yīng)用號(hào)開發(fā)資源匯總文檔工具教程代碼插件組件文檔從搭建一個(gè)微信小程序開始小程序開發(fā)文檔小程序設(shè)計(jì)指南工具小程序開發(fā)者工具官方支持微信小程序?qū)崟r(shí)預(yù)覽的支持的微信小程序組件化開發(fā)框架轉(zhuǎn)在線工具小程序云端增強(qiáng)社區(qū)微信小程序 微信(小程序or應(yīng)用號(hào))開發(fā)資源匯總-文檔-工具-教程-代碼-插件-組件 文檔 從搭建一個(gè)微信小程序開始 小程序開發(fā)文檔 小程序設(shè)計(jì)指南 工具 小程序開發(fā)者...
摘要:本文托管在上,不定期更新最后更新時(shí)間官方文檔小程序開發(fā)文檔小程序設(shè)計(jì)指南小程序開發(fā)者工具新聞報(bào)道微信正式開放內(nèi)測(cè)小程序,不開發(fā)的日子真的來(lái)了氪關(guān)于微信小程序應(yīng)用號(hào),我能透露的幾個(gè)細(xì)節(jié)可能吧你的產(chǎn)品適不適合做微信小程序你需要這篇產(chǎn)品邏 本文托管在github上,不定期更新:justjavac/awesome-wechat-weapp 最后更新時(shí)間:2016-09-24 06:22:10 ...
摘要:有問題可通過微博聯(lián)系我開源項(xiàng)目微信小程序微信小應(yīng)用資源破解文檔微信小應(yīng)用示例代碼文檔簡(jiǎn)易教程開發(fā)者工具文檔文檔視圖組件文檔常見問題教程微信小程序開發(fā)文檔微信公眾平臺(tái)文檔微信小程序怎么開發(fā)玩物志用一個(gè)上午上線了電商應(yīng)用愛范兒 有問題可通過微博聯(lián)系我: http://weibo.com/jinfali 開源項(xiàng)目 wechatApp-demo - 微信小程序 DEMO weapp-ide-...
閱讀 2495·2021-11-24 10:29
閱讀 2634·2021-09-24 09:48
閱讀 5737·2021-09-22 15:56
閱讀 3152·2021-09-06 15:00
閱讀 2667·2019-08-30 15:54
閱讀 741·2019-08-30 13:48
閱讀 2894·2019-08-30 11:17
閱讀 3417·2019-08-29 11:20