小程序基础
引入文件/组件
暴露接口
module.exports=A
引入文件(建议使用相对路径)
使用require('./A.js)
include 引入 组件
import 引入template模板
使用模板
内置方法
都放在wx命名空间下,我们通过wx调用
- wx.login 登录成功过后执行的方法
- 参数是一个对象,对象中有一个success方法
- wx.getSetting 获取授权的方法
- 参数是一个对象 对象中有一个success方法
- wx.getUserInfo 获取用户信息
- 参数是一个对象,对象中有一个success方法
全局方法
- App: 创建应用程序的方法
- getApp: 获取引用程序的方法
- Page: 创建页面的方法
- getCurrentPages: 获取当前页面的方法
常用事件方法
我们通过生命周期说明页面的创建过程
- onLoad 页面你载入时执行的方法
- onShow 页面显示时执行的方法
- onReady 页面渲染完成时执行的方法
- onHide 页面隐藏时执行的方法
- onUnload 页面销毁时执行的方法
页面加载时 会按上面的顺序一次执行,当页面切换属性的时候,onShow方法和onHide方法交替执行
常用事件方法
- onPullDownRefresh : 监听用户下拉动作
- onReachBottom: 监听也买你触底方法
- onShareAppMessage: 监听分享方法
数据渲染原理 在微信小程序中,采用双线程模式
- 视图层的采用webview渲染
- 业务逻辑层面为js单独开辟一个线程
数据驱动 小程序是基于MVVM模式实现的,因此实现了数据驱动,定义上面数据就渲染什么数据 使用方法
- 在脚本文件中通过data属性定义数据
- 在页面中沟通过插值语法渲染数据
页面渲染
插值语法{{}}
- 微信插值语法并没有提供一个真真正正的js环境(伪js环境)
- 只能允许简单的运算(加减乘除)
- 以及对象获取属性的点语法,数组获取成员中的你给括号语法
- 不支持语句(内置的方法)
- 组件的属性和内容都可以使用插值语法
更新数据(在页面中,想修改绑定的数据,要使用setData方法)
- this.setData({key,value}) 参数是对象
- key 表示属性名 小程序对属性名做了拓展 可以表示直接属性,也可以使用间接子属性
- value表示修改的数据
列如 var obj={a:{b:{c:100}}} a就是obj的直接属性,b和c就是obj的简介子属性,不许要通过a间接的获取,修改c的时候,key可以写成'a.b.c'
data:{
obj:{
color:'pink',
size:{
width:20,
height:30
}
}
}
//直接修改
this.setData({
obj:{
//为了防止属性丢失要重写
color:'pink',
size:{
width:20,
height:40
}
}
}
})
//间接属性语法
this.setData({
'obj.size.width':40
})
数据丢失
- 数据驱动就是指数据发生改变 视图就会同步更新,如果数据改变了,但是视图没有更新,此时我们就说数据丢失了,数据丢失产生的原因是直接修改data中的数据,为了避免数据丢失,要通过setData方法去修改
- 小程序将更具setData修改的数据更新视图,为了提高性能,要尽量减少修改的数据(修改必要的数据)
setData({}) 更新对象 或数组的用法
原数据
menu=[
{id: "13", price: "22", title: "南洋鸡肉卷套餐", sales: "36", img: "13.jpg",num:0},
{id: "14", price: "23", title: "菠萝鸡腿堡套餐", sales: "38", img: "14.jpg", num:0},
{id: "15", price: "29", title: "双鸡堡套餐", sales: "33", img: "15.jpg",num:0}
]
更新数据的写法
addNum:function(e){
let id=e.currentTarget.dataset.id;
let num=1;
this.data.menu.forEach((item,index)=>{
if(item.id==id){
console.log(item.num)
let n=+item.num+num;
if(n>=0){
this.setData({
['menu['+index+'].num']:n
})
}
}
})
}
WXML属性
属性分两种
- 共有属性(可以为所有组件添加的属性)
- 组件属性(可以指定的组件添加的属性,称为特有属性)
WXML事件
在wxml中可以为每一个组件添加事件(添加的事件要在脚本文件中定义出来) 一共分为两种
- 第一种 为每一个组件添加的事件 称为共有事件
共有事件:touchstart touchmove touchend tap longTap(350ms)
- 第二种 为了特定的组件添加的事件 称为特有事件 如表单绑定的submit事件
按照冒泡和非冒泡 事件又分两种 :冒泡事件和非冒泡事件 冒泡:事件执行的时候,从子组件传递到父组件的过程 我们可以通过bind或者catch为组件绑定事件
- bind绑定的事件 会冒泡
- catch绑定的事件 不会冒泡
事件对象
组件
**view 组件 **
text组件
rich-text组件
image组件
icon组件 字体图标
canvas 组件 画布
map组件 地图
video组件 媒体播放器 camera组件 摄像头 live-player 直播组件 live-pusher 推送组件
表单组件
指令
微信中指令的语法 wx:指令名称=""
- 条件指令 wx:if="" wx:else=""
- 如果在条件中出现了变量,要使用插值语法(是真正的创建与删除,不是控制元素的显示隐藏)
循环指令wx:for="data" data表示遍历的数据 可以是数组也可以是数字
(一定要设置wx:key="index" 属性值value 必须爆炸数据的唯一性) 在循环的指令中
- 默认的成员变量名称 item
- 默认的索引值变量名称 index 我们可以通过指令改变默认的成员以及索引值变量名称
- wx:for-item:要改变的成员名称
- wx:for-index:要改变的索引值名称
block组件 模板组件 该组件包裹内容本身不会渲染出来(相当于vue的template模板指令 包裹子元素 本身不会渲染到页面上)
templage组件 用于定义模板组件
templage 用法
scroll-view 组件 滚动区域
swiper组件
movable-area组件 用于定义可移动的区域
cover-view组件 用来遮盖源生组件
open-data组件 用来定义开放组件 开放用户的信息
web-view组件 用来引入一个html页面渲染
wxs组件
- 先定义
- 在使用
wxss与rpx
rpx 是微信小程序解决自适应屏幕尺寸的尺寸单位。微信小程序规定屏幕的宽度为750rpx。
无论是在iPhone6上面还是其他机型上面都是750rpx的屏幕宽度,拿iPhone6来讲,屏幕宽度为375px,把它分为750rpx后, 1rpx = 0.5px。
flex布局
API
同步写法与异步写法
本地存储
本地存储设置数据
页面类型
路由
- 有两种路由方式
- 用法
- 路由方法
堆栈
指南针