微信小程序> 微信小程序极简入门(八)--逻辑层(.js)

微信小程序极简入门(八)--逻辑层(.js)

浏览量:1475 时间: 来源:lightTrace

在上一一节,我们笼统的了解了小程序分为:视图层(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" 点我 /view

index.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 /button

index.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')  }})
小程序

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

最新资讯

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎