在上一一节,我们笼统的了解了小程序分为:视图层(View)和逻辑层(App Service),我们这一节来了解下逻辑层的基本操作。
一 注册程序
App()函数用来注册一个小程序。接受一个object参数,其指定小程序的生命周期函数等。
App()必须在app.js中注册,且不能注册多个。
Object参数说明:
前台、后台定义:当用户点击左上角关闭,或者按了设备 Home 键离开微信,小程序并没有直接销毁,而是进入了后台;当再次进入微信或再次打开小程序,又会从后台进入前台。需要注意的是:只有当小程序进入后台一定时间,或者系统资源占用过高,才会被真正的销毁。
我们在index.js打Page ide就会自动补全一个初始化数据集和很多函数。
data数据集初始化数据我们上一节就很容易看的出来它的原理了,这一节主要学习几个常用的函数。
二 页面相关事件的处理函数
1.onPullDownRefresh: 下拉刷新
监听用户下拉刷新事件。
需要在config的window选项中开启enablePullDownRefresh。
当处理完数据刷新后,wx.stopPullDownRefresh可以停止当前页面的下拉刷新。
2.onReachBottom: 上拉触底
监听用户下拉触底事件。
3.onPageScroll: 页面滚动
监听用户滑动页面事件。
4.onShareAppMessage: 用户转发
只有定义了此事件处理函数,右上角菜单才会显示“转发”按钮
用户点击转发按钮的时候会调用
此事件需要 return 一个 Object,用于自定义转发内容
我在微信小程序极简入门(六)–豆瓣电影小程序下拉刷新和搜索功能
中使用过下拉刷新的功能,代码是:
onPullDownRefresh() { wx.showLoading({ title: '加载中', }) this.retrieveData().then(() = { wx.stopPullDownRefresh() wx.hideLoading() }) },下拉的时候,刷新并显示加载效果,当retrieveData方法完成后调用wx.stopPullDownRefresh()停止刷新,看关于页面的使用函数基本都是这么简单!
三 事件处理函数
1.概念
事件处理函数主要是在渲染层的组件加入绑定,当达到触发事件时,就会执行Page中定义的事件处理函数。诶。感觉和web是一样的嘛,我就是在说废话,哈哈。
我们看一个简单的事件绑定函数的例子:
index.wxml
view bindtap="viewTap" 点我 /viewindex.js
Page({ viewTap: function () { console.log('view tap') }})2.setData函数
我们在事件绑定中常常会使用setData函数,这个函数非常重要,它是函数用于将数据从逻辑层发送到视图层,同时改变对应的this.data值.
setData()参数格式:
接受一个对象,以key,value的形式,其实仔细观察小程序的很多思想都是key,value的,甚至函数都不例外。
注意:
直接修改 this.data 而不调用 this.setData 是无法改变页面的状态的,还会造成数据不一致
单次设置的数据不能超过1024kB,请尽量避免一次设置过多的数据。
示例代码:
index.wxml:
!--index.wxml--view{{text}}/viewbutton bindtap="changeText" Change normal data /buttonview{{num}}/viewbutton bindtap="changeNum" Change normal num /buttonview{{array[0].text}}/viewbutton bindtap="changeItemInArray" Change Array data /buttonview{{object.text}}/viewbutton bindtap="changeItemInObject" Change Object data /buttonview{{newField.text}}/viewbutton bindtap="addNewField" Add new data /buttonindex.js:
//index.jsPage({ data: { text: 'init data', num: 0, array: [{text: 'init data'}], object: { text: 'init data' } }, changeText: function() { // this.data.text = 'changed data' // bad, it can not work this.setData({ text: 'changed data' }) }, changeNum: function() { this.data.num = 1 this.setData({ num: this.data.num }) }, changeItemInArray: function() { // you can use this way to modify a danamic data path this.setData({ 'array[0].text':'changed data' }) }, changeItemInObject: function(){ this.setData({ 'object.text': 'changed data' }); }, addNewField: function() { this.setData({ 'newField.text': 'new data' }) }})四 页面路由
在小程序中所有的页面全都由框架进行管理,我们终于从action层跳脱了出来,感觉贼爽,这是我愿意学习小程序很大的一个理由。
1.页面栈
MINA框架以栈的形式维护了当前的所有页面。当发生路由切换的时候,栈的表现如下:
五 模块化
我们可以将一些公共的代码抽离成为一个单独的js文件,作为一个模块。模块只有通过module.exports或者 exports才能对外暴露接口。
这里不说了,和node.js的模块化是一样的。
看一下官方例子:
// common.jsfunction sayHello(name) { console.log('Hello ${name} !')}function sayGoodbye(name) { console.log('Goodbye ${name} !')}module.exports.sayHello = sayHelloexports.sayGoodbye = sayGoodbye在需要使用这些模块的文件中,使用require(path)将公共代码引入。
var common = require('common.js')Page({ helloMINA: function() { common.sayHello('MINA') } goodbyeMINA: function() { common.sayGoodbye('MINA') }})小程序













