写一个微信小程序系列的开发关键点
微信开发者工具工程目录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' }] } }) // 效果  // 思路, 能够尝试充分利用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。