微信小程序

这是我参与更文挑战的第18天,活动详情查看: 更文挑战

何为微信小程序

  • 基于微信
  • 功能单一
  • 原生体验

优势

  • 扫码安装,用完即走
  • 多端兼容
  • 离线功能
  • 开发成本低

劣势

  • 仅用于微信,无法复用
  • 硬件支持差
  • 有限场景、有限业务
  • 不可外链、不可分享

流程

(1)、注册(新的账号)
(2)、认证(限制支付功能)
(3)、开发(20个开发者账号)
(4)、审核(约两周)
(5)、发布(覆盖更新)
运营规范

  • 名称、简介
  • 服务类目
  • 功能(单一、独立)
  • 内容
  • 数据

语言设计及规范

(1)、友好礼貌

  • 重点突出
  • 流程明确

(2)、清晰明确

  • 导航明确,来去自如
  • 减少等待,反馈及时
  • 异常可控,有路可退

(3)、便捷优雅

  • 减少输入
  • 避免误操作
  • 利用接口提升性能

(4)、统一稳定

开发-文件结构

小程序主体

app.js 小程序逻辑
app.json 小程序公共设置
app.wxss 小程序公共样式表

小程序页面

.js 页面逻辑
.json 页面配置
.wxml 页面结构
.wxss 页面样式表

配置文件

属性 类型 描述
pages String Array 设置页面路径,数组的第一项代表小程序的初始页面
window Object 设置小程序的状态栏、导航条、标题、窗口背景色、下拉刷新
tabBar Object 设置底部tab的表现
networkTimeout Object 设置各种网络请求的超时时间
debug Boolean 设置是否开启debug模式

开发-MINA框架

image.png

WXML

  • 数据绑定
  • 条件渲染
  • 列表渲染
  • 模板
  • 事件
  • 引用

WXML-数据绑定

  • {{Mustache}}语法
  • 动态数据来自Page对象的data
  • {{}}中应为javascript表达式或对象
page({
    data: {
        a: 1,
        b: 2,
        c: 3
    }
})
复制代码
<text>{{a}} + {{b}} = {{a+b}}</text>

<text hidden="{{a === 1}}">something...</text>

<view wx:for="{{[a, b, c]}}">{{item}}</view>

<template is="component" data="{{a, b, sum: c}}"></template>
复制代码

WXML-条件渲染

  • 单个元素
<view wx:if="{{size > 100}}"> big </view>
<view wx:elif="{{size < 10}}"> small </view>
<view wx:else> normal </view>
复制代码
  • 多个元素
<block wx:if="{{true}}">
    <view> view1 </view>
    <view> view2 </view>
</block>
复制代码
  • wx:if vs. hidden

WXML-列表渲染

  • wx:for
<view ws:for="['one', two', 'three']">{{index}}-{{item}}</view>
复制代码
  • 自定义迭代项
<block
    ws:for="['one', 'two', 'three']"
    ws:for-index="idx"
    ws:for-item="value">
    <text>{{idx}}</text>
    <text>{{value}}</text>
</block>
复制代码
  • wx:key

(1)、迭代项为对象时的某个属性(唯一性)

<button ws:for="objectArray" wx:key="id">{{item.text}}</button>
复制代码

(2)、迭代项为字符串或数字时

<button ws:for="objectArray" wx:key="id">{{item.text}}</button>
复制代码

WXML-模板

  • 定义
<template name="sampleTemplate">
    <view>
        <text>{{index}}:{{msg}}</text>
        <text>Time: {{time}}</text>
    </view>
</template>
复制代码
  • 使用
<template
is="sampleTemplate"
data="{{index: 0, msg: 'hello world', time: new Date()}}"/>
复制代码

**模板具有自己的作用域

WXML-事件

  • bind

不会阻止事件冒泡

  • catch

阻止事件冒泡

page({
    tapName: function(event){
        console.log(event)
    }
});
<view id="tapTest" data-hi="WeChat" bindtap="tapName">Click me!</view>
复制代码

冒泡事件: touchstart、touchmove、touchend、touchcancel、tap、longtap
非冒泡事件: submit、input、scroll

WXML-引用

(1)、 import
import可以在该文件中使用目标文件的template
import有作用域,不会引入目标文件import的内容

(2)、 include
include可以将目标文件除template外的所有代码引入
相当于拷贝

WXSS(WeiXin Style Sheet)

优点
支持css大部分特性(支持flex、动画)
增加rpx(responsive pixel)尺寸单位
支持样式导入(@import)
支持内联样式

缺点
选择器支持很差,不支持级联,不支持伪类
相同选择器的样式不是合并,而是覆盖
资源不支持本地资源,只能网络资源或者base64

逻辑层-注册App

App({
    onLaunch: function() {
        // 当小程序初始化完成时,会触发onLaunch(全局只触发一次)
    },
    onShow: function() {
        // 当小程序启动,或从后台进入前台显示,会触发 onShow
    },
    onHide:function() {
        // 当小程序从前台进入后台,会触发onHide
    },
    onError: function(msg) {
        // 当小程序发生脚本错误,或者api调用失败时,会触发onError并带上错误信息
        console.log(msg)
    },
    globalData: 'I am global data'
});
复制代码
属性 类型 描述
data Object 页面的初始数据
onLoad Function 监听页面加载,接收页面参数
onReady Function 监听页面初次渲染完成
onShow Function 监听页面显示
onHide Function 监听页面隐藏
onUnload Function 监听页面卸载
onPullDownRefresh Function 监听用户下拉动作
onReachBotton Function 页面上拉触底事件的处理函数
onShareAppMessage Function 用户点击右上角分享
其他 Any 开发者可以添加任意的函数或数据到object参数中,在页面的函数中用this可以访问

组件

(1)、视图容器

  • view
  • scroll-view
  • swiper

(2)、基础内容

  • icon
  • text
  • progress

(3)、表单组件

  • button
  • checkbox
  • form
  • input
  • label
  • picker
  • picker-view
  • radio
  • slider
  • switch
  • textarea

(4)、导航

  • navigator

(5)、媒体组件

  • audio
  • image
  • video

(6)、地图

  • map

(7)、画布

  • canvas

(8)、客服会话

  • contact-button

API

API-网络

(1)、发起请求

  • 非浏览器环境的ajax请求
  • 仅支持https
  • 没有cookie

(2)、文件上传下载
(3)、WebSocket

API-媒体

  • 图片
  • 录音
  • 语音播放控制
  • 音乐播放控制
  • 音频组件控制
  • 视频
  • 视频组件控制

API-数据存储

  • key-value文件存储实现,并非localStorage
  • <10M

API-位置

  • 获取位置
  • 查看位置
  • 地图组件控制

API-设备

  • 系统信息
  • 网络状态
  • 重力感应(5次/秒)
  • 罗盘(5次/秒)
  • 拨打电话
  • 扫码

API-界面

(1)、交互反馈

  • toast
  • modal
  • actionSheet

(2)、设置导航条
(3)、导航

  • navigateTo
  • redirectTo
  • switchTab
  • navigateBack

(4)、动画(现可使用css3动画取代)
(5)、绘图(类canvas)
(6)、下拉刷新

API-开放接口

  • 登录
  • 用户信息
  • 微信支付
  • 模板消息
  • 客服消息
  • 分享

导航与页面栈

路由方式 API 对应组件 页面栈 新页面 当前页面
打开新页面 wx.navigateTo <navigator url="{{url}}" open-type="navigate">link</navigator> 新页面入栈 onLoad,onShow onHide
页面重定向 wx.redirectTo <navigator url="{{url}}" open-type="redirect">link</navigator> 当前页面出栈,新页面入栈 onLoad,onShow onUnload
页面返回 wx.navigateBack n/a 页面不断出栈,直到目标页面 onShow onUnload
Tab切换 wx.switchBack <navigator url="{{url}}" open-type="switchTab">link</navigator> 页面全部出栈,只留下新的Tab页面 depends depends

场景推荐

  • 全流程就诊
  • 网络问诊
  • 医学知识
  • 医药电商
  • 工具类

关于接口

  • url命名
  • 字段命名与组织
  • 枚举类型
  • content-type
  • 避免不必要的异常

关于接口-url命名

  • 指向特定明确的内容
  • 小写
  • /分隔

关于接口-字段

  • 一目了然
  • 驼峰命名
  • 明确的数据类型
  • 内聚性高的可以组装成对象
  • is、has开头的字段为布尔值更直观
  • 数组型字段应为复数,或带有list字样

关于接口-枚举类型

  • 值与值之间应当是独立、原子的
  • 数字1、2、3优于字符串“1”、“2”、“3”
  • “RED”、“GREEN”、“BLUE”可读性最高

关于接口-contentType

  • 能使用JSON传递数据,就使用JSON

关于接口-避免不必要的异常

  • 如果数据查询为空,那就返回空,不一定是异常
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享