目录
1.wxml语法
声明和绑定数据{{}}
在{{}}中可以进行动态赋值、算术运算、三元运算和逻辑判断,但是不能使用.js文件中的方法如if条件判断、for循环或者是某个函数
算术运算 <view>{{id+1}}</view>
三元运算 <view>{{id === 1 ? "等于":"不等于"}}</view>
逻辑判断 <view>{{id === 1}}</view>
setData
setData修改数据
this.setData两个作用:更新数据,驱动视图(页面)更新
使用键值对的形式来更新数据,key:是需要更新的数据,value:是最新的值
setData修改对象类型数据
设置三个view组件,使用{{}}放置userinfo.name userinfo.age userinfo.test三个变量,再用button绑定一个点击事件
在.js文件中,调用绑定事件,现在data{}方法中声明userinfo这个空列表,之后再绑定事件函数中通过this.setData({})来为对象赋值;
也可以现在data中userinfo的空列表中先声明好变量的初始值,之后再修改数据。有三种修改方法:
- 可以直接通过this.setData({})来修改数据;
- 当修改的变量较多,书写地址不方便,可以使用ES6提供的展开运算符,const userinfo={...this.data.userinfo},其中的...this.data.userinfo是在调用原先的数据,在下面的修改中就可以不用再写userinfo,修改之后再使用this.setData({})将新的值赋值给userinfo(当键和值一样时可以简写,只写一个)
- 使用Object.assign()将多个对象合并为一个对象,const userinfo = Object.assign(this.data.userinfo,{name:'Jerry'},{age:12}),修改之后使用this.setData({})将新的值赋值给userinfo
修改和赋值的时候都将key写成数据路径的形式,如userinfo.name(a.b.c)
在删除数据时,有两种方法
- 删除单个属性,直接delete this.data.数据地址名(就像是userinfo.name,是a.b.c的形式),之后调用this.setData({})方法将this.data.userinfo重新赋值给userinfo
- 删除多个属性,使用rest剩余参数,const {age,test,...rest} = this.data.userinfo,此处将要删除的变量名写在...rest的前面,删除后将rest赋值给userinfo
setData修改数组类型数据
增加数据有三种方法
- 使用push(),将新的数据推到原数组中,再通过this.setData({})方法赋值
- 使用中间变量,用concat()函数来连接字符串,const newList = this.data.list.concat()
- 使用中间变量,用数组来存储数据,const newList = [...this.data.list,4],在调用过原来的数据之后,将新的数据放在数组后面
修改数据
在list数组中只存放的是数据时,可直接通过索引值来修改数据;
如果list数组中使用了{{}}来存放数据,现在.wxml文件中更改要展示的数据,之后再在this.setData({})函数中修改即可,注意键名
删除数据
删除数组中的数据有两种方法
使用splice()函数,splice(1,1)表示删除索引为1开始的1个元素
使用filter()函数,可进行判断,filter(item => item !== 2) 将索引值不等于2的数据筛选出来
splice()函数
filter()函数
简易双向数据绑定
在.wxml文件中,普通属性的绑定是单向的,即在页面上修改数据不会影响到调试器中显示出来的数据,但是在调试器中修改数据可以在页面上显示
为了实现双向数据绑定,可以在对应属性前面加上model前缀
注意:绑定的属性值只能是一个单一字段的绑定,不能掺杂汉字;另外,不能写data路径,也就是不支持数组和对象
列表渲染
列表渲染,即通过循环遍历一个数组或者对象,将其中的每个元素渲染到页面上
通过wx:for属性绑定一个数组或对象,既可以使用每一项数据重复渲染当前组件;如果渲染的是数组,item指的是数组中的每一项,index指的是下标(索引);如果渲染的是对象,item指的是对象属性的值,index指的是对象属性
在使用wx:for属性时,建议加上wx:key属性,它的值以两种形式提供;字符串(每一项固定的某个属性),代表需要遍历数组中item的某个属性,该属性的值需要是数组中唯一的字符串或者数字,且不能动态改变;*this关键字,代表在for循环中的item本身,当item本身是一个唯一的字符串或数字时使用
进阶用法:使用wx:for-item来修改默认的变量名, wx:for-index修改默认的下标
<block/>不是一个组件,仅仅是一个包装元素,不会在页面中做任何渲染,只接受控制属性
条件渲染
条件渲染主要用来控制页面结构的展示和隐藏,有两种方式
使用wx:if 、wx:elif 、wx:else属性组;其中wx:elif 和 wx:else不能单独使用,必须和wx:if结合使用;这三个在使用的时候要连贯,中间不能被隔开
使用hidden属性,它主要是通过css中的display属性来控制页面结构的展示和隐藏
wx:if,当条件结果为true时将结构展示出来,否则结构不会展示;hidden,当条件为true时将结构隐藏,否则结构会展示出来
2.生命周期
小程序更新机制
onLaunch()更新版本
小程序的生命周期
应用生命周期
应用生命周期函数在app.js文件中定义,App()方法必须在app.js中调用,主要用来注册小程序,生命周期函数由onLaunch、onShow、onHide三个函数组成
onLaunch 小程序初始化;onShow 小程序启动或切前台;onHide 小程序切后台
冷启动,小程序销毁后,再次打开要重新经历下面的历程
热启动,关闭小程序后,再次打开只从onShow函数开始
所以,一次只经历一个onLaunch函数
页面生命周期
页面生命周期指的是小程序页面从 加载-运行-销毁 的整个过程
页面生命周期函数需要在Page()方法中进行定义,在该页面的js文件中定义
onLoad 监听页面加载;onShow 监听页面展示;onReady 监听初次渲染完成;onUnload 监听页面卸载;onHide 监听页面隐藏
在页面展现的过程中,onLoad和onReady只执行一次
有页面跳转的话,看open-type的类型,如果是保留原页面(就是能返回上一页),那么不调用onUnload函数,调用的是onHide函数;在页面从前台切到后台,调用的也是onHide函数;在页面从后台切到前台,调用的是onShow函数
还有两点:tabBar页面之间的转换,页面不会被销毁;在返回上一页,就是点击左上角的<,(此处指的是跳转页面,但是不声明open-type类型),页面会被销毁
3.小程序API
介绍
小程序提供的API几乎全部挂载在wx对象下,如wx.request()、wx.setStorage()等,wx对象实际上就是小程序的宿主环境微信所提供的全局对象
异步API,通常接受一个object类型的参数,例如wx.request({})
同步API,约定以Sync结尾,例如:wx.setStorageSync()
事件监听API,约定以on开头,例如wx.onAppHide()
发起网络请求
接口地址要先在开发者平台配置
跳过域名的配置
界面交互-loading提示框
wx.showLoading()显示提示框 wx.hideLoading()关闭提示框
显示提示框时,注意title里面的内容,太多的会隐藏起来;mask:true时,可以形成透明层,防止触摸穿透
不管数据请求成功还是失败,都要关闭提示框
模态对话框和消息提示框
wx.showModal() 模态对话框,询问是否删除商品,是否退出登录等
wx.showToast() 消息提示框,提示删除成功,退出成功等信息
在介绍异步API时,说如果Object参数没有success/fail/complete时默认返回Promise,需要自行封装
这里在调用函数前添加了async 并在调用wx.showModal()方法时,添加了const {confirm}来接收数据
下面根据得到的confirm值的true或者false,来提示相应的内容
本地储存
同步API
存储的过程中,第一个参数是key值,第二个参数是需要存储的数据;当存储的是对象数据类型时,不需要使用JAON.stringify 和 JSON.parse进行转换
获取和删除数据时,根据key值删除
清空时不需要任何参数
异步API
全部没有Sync后缀,并且是以({})的形式来存储数据,在接收数据时,可以定义data变量接收
路由与通信
与前面所学的按钮绑定跳转事件相似,只不过这里的方法都是wx.开头,并且其中一些方式是不能携带参数的,如wx.switchTab()
在跳转到的页面可以通过onLoad()函数来获取打印出数据
上拉加载
先在app.json文件中配置距离页面底部的距离:onReachBottomDistance
之后在页面的.js文件中定义onReachBottom事件监听用户上拉加载,利用数组最后一个数字加1,2,3来获得新的数组,进行拼接即可
还添加了数据加载的提示框
下拉刷新
在页面.js文件中定义onPullDownRefresh事件监听用户下拉刷新
在onPullDownRefresh(){}函数中主要分为两个部分,下拉刷新时重置数据,弹回loading框
增强scroll-view
在.wxml文件的scroll-view标签中添加以下属性
上拉加载属性
- lower-threshold="100" 表示上拉触底的距离
- bindscrolltolower="getMore" 绑定上拉加载函数
- enable-back-to-top 表示是否回到顶部,默认值为true
下拉刷新属性
- refresher-enabled 表示是否能刷新,默认值为true
- refresher-default-style 上拉刷新的小圆点颜色
- refresher-background 上拉刷新的背景颜色
- bindrefresherrefresher 绑定上拉刷新的函数
- refresher-triggered 是否弹回提示框,值为false时弹回