寫一個微信小程序系列的開發關鍵點
微信開發者工具工程目錄php
關於小程序的工程架構, 文件目錄, 已經有不少coder發表過相關資料. 這裏不作更多解釋, 留存一篇留待翻閱:小程序工程目錄結構介紹css
小程序可使用行內樣式, 可使用class樣式html
style
實現行內樣式:<button style="color:red">{{motto }}</button>
// .wxml <button style="color:{{color}}">{{motto }}</button> // .js var PARAM = { data: { color: "red" }, onLoad: function (event) { // .. } } //獲取應用實例 var app = getApp(); Page(PARAM)
小程序兼容大部分傳統CSS語法前端
CSS3
, position
, float
,諸如傳統的聖盃佈局
,左右雙飛翼
佈局均可以在小程序端實現小程序擴展了特性json
尺寸單位 rpx
小程序
小程序擴展了 `rpx`, 本意是但願 `rpx` 根據屏幕寬度進行自適應。 但前端已經有了 `vw`, `vh` ; 並且通過測試, `vw', 'vh`, 在wxml 中能完美實現, 重複造輪子不是畫蛇添足嗎? 嘿, 具體緣由國內社區居然響應者寥寥無幾, // TODO // 留待個人指引
@import
導入外聯樣式表/** common.wxss **/ .small-p { padding:5px; } /** app.wxss **/ @import "common.wxss"; .middle-p { padding:15px; } // TODO // 日常工做中使用的通常都是 `scss`會大量利用到 `import`; `import` 在小程序的合做開發, 組件引用中確定有他的光彩; // 能夠嘗試利用諸如 `koala`等工具將 `scss`與 `wxss`結合, 必定事半功倍
微信小程序View組件和Flexbox彈性盒模型segmentfault
微信小程序完美兼容 flex佈局, 之前一直由於flex在各終端, 各平臺兼容性問題顯得不溫不火 這下能夠由得flex 大顯身手了
// 行佈局, 實現: flex-direction:column // 在前端佈局中缺省佈局, 即爲行佈局, display缺省值爲block <view style="flex:1"> <view style="display:flex;flex-direction:row"> <view style="background:green"></view> <view style="background:red"></view> <view style="background:blue"></view> </view> </view> // 列布局, 實現: flex-direction:column <view style="flex:1"> <view style="display:flex;flex-direction:column"> <view style="background:green"></view> <view style="background:red"></view> <view style="background:blue"></view> </view> </view>
flex佈局還有諸如: just-content
, align-item
等屬性 ; 這方面的資料留存以待翻閱 : CSS 彈性盒子佈局 - CSS | MDN 以及 微信小程序flex-demo微信小程序
小程序的事件函數命名與傳統的有所出入, 如傳統的移動端點擊事件爲 tap
, 而小程序爲 bindtap
, 這裏留存一份事件函數資料, 以待查閱 : 微信小程序 事件api
// wxml <view data-alpha-beta="1" data-alphaBeta="2" bindtap="bindViewTap"> DataSet Test </view> // js Page({ // event參數爲事件源對象, 包含了諸如currentTarget, dataset, type等等信息 bindViewTap:function(event){ event.currentTarget.dataset.alphaBeta === 1 // - 會轉爲駝峯寫法 event.currentTarget.dataset.alphabeta === 2 // 大寫會轉爲小寫 } })
wxml
不支持像jq同樣操做dom元素,也沒有諸如原生js的appendChild
等方法;WhatF
? 那交互呢?微信
// wxml <view class="{{demoCss}}"> demo</view> // js var that = this; that.setData({ demoCss: "selectEd"; });
// wxml <view class="{{demoCss}}"> {{demoText}}</view> // js var that = this; that.setData({ demoText: "demoText"; });
這裏不得不放大招了 : 列表渲染 · 小程序
// wxml view wx:for="{{array}}"> {{index}}: {{item.message}} </view> // js Page({ data: { array: [{ message: 'foo', }, { message: 'bar' }] } }) // 效果 ![clipboard.png](/img/bVTNcy) // 思路, 能夠嘗試充分利用dataList屬性 // 操做dom還有 條件渲染, 模板 的方式, 準備把這一塊單獨擰出來寫一份 // TODO
使用方式和傳統的使用方式區別不大, 網絡上亦有大量的教材, 這裏不做過多解釋
發起請求 · 小程序:
wx.request({ url: 'test.php', //僅爲示例,並不是真實的接口地址 data: { x: '' , y: '' }, header: { 'content-type': 'application/json' }, success: function(res) { console.log(res.data) } })
2種實現思路
position
超出屏幕隱藏, 切換頁面即切換 view
// 可參考個人接下來的 小程序系列 - <左右切換 tab-demo> <view> // 屏幕內page <view class="page-1 page-show"></view> // 屏幕外page <view class="page-2 "></view> </view>
function f(){ console.log(this) // undefined }
var f = function(){ setTimeout(function(){ console.log(this) // function(){console.log(this)} }) }
var f = function(){ setInterval(function(){ console.log(this) // 小程序的-window對象 }) }
Page({ onLoad: function(option){ console.log(this) // 一個名爲e的對象(包含setData) } })
- 刷新dom, 在操做數據後後必須經過 setDate
方法, 從新渲染
- 調試能夠經過 console.*()
系列方法 在控制檯打印信息
dom
的開發方法, 採用了JavaScriptCore的開發思路,實現JS -> WXML
動態解析。MVVM
框架思路,實現了諸如 單向數據綁定
, 可移植
在coding過程當中真的是隻須要關心邏輯的實現, 數據的排序, 避免反覆的查找丶操做dom。 對代碼的簡潔度, 邏輯的梳理, 仍是頗有幫助的!必看
原文地址: https://segmentfault.com/a/11...轉載無需聯繫, 但請著名來源 @SF.GG-Starch。