小程序学习(四)之逻辑层(主要说的是对应的js文件)

小程序学习(四)之逻辑层(主要说的是对应的js文件)

本节知识点:

  • 注册小程序

  • 场景值

  • 注册页面

  • 路由

  • 模块化

  • API


App()

App()函数用来注册一个小程序,接受一个object参数,其指定小程序的生命周期函数等。

object参数说明:

  • onLaunch

    类型是function 作用监听小程序初始化,触发时机就是当小程序初始化加载,会触发onLaunch(全局只触发一次)

  • onReady

    类型function 作用监听小程序加载。触发时机当小程序初次渲染完成。

  • onShow

类型是Function 作用是监听小程序显示。触发时机当小程序启动后,或者从后台进入前台显示,会触发onShow

  • onHide

类型是Function 作用是监听小程序隐藏,触发时机当小程序从前台进入后台时候,会触发onHide

  • OnError

类型function 作用错误监听函数 , 当小程序发生脚本错误,或者api调用失败。会触发onError并带上错误信息

  • 其他

类型Any 开发者可以添加任意的函数或者数据到object参数中,用this可以访问

前台,后台定义。当用户点击左上角关闭,或者来电话的时候,小程序并没有直接销毁,而是进入了后台。当再次进入小程序就又会从后台进入前台。
特别注意:只有当小程序进入后台一定的时间,或者系统资源占用过高,才会被真正的销毁。

getApp()

我们提供了全局的getApp()函数,可以获取到小程序实例

var app = getApp();
console.log(app.globalData)   //I am global data

特别注意:App()必须在app.js中注册,且不能是多个
不要在定义于App()内的函数调用getApp()使用this 就可以拿到app实例
不要在onlauch的时候调用getCurrentPages(),此时page还没有生成
通过getApp() 获取到实例后,不要私自调用或者启用生命周期函数

Page

Page()函数用来注册一个页面,接受一个object参数,其指定的页面的初始数据,生命周期函数,事件处理函数等等

Object参数说明:

  • data 类型object 作用页面的初始数据

  • onLoad 类型Function 作用监听页面加载(只执行一次)

  • onReady 类型Function 作用监听页面初次渲染完成

  • onShow 类型Function 作用监听页面显示

  • onHide 类型Function 作用监听页面隐藏

  • onUnload 类型Function 作用监听页面卸载

  • onPullDownRefresh 类型Function 作用监听用户下拉动作

  • onReachBottom 类型Function 作用页面上拉触底事件的处理函数

  • onShareAppMessage 类型Function 作用用户点击右上角转发

  • onPageScroll 类型Function 作用页面滚动触发事件的处理函数

  • 其他 类型 Any 作用开发者可以添加任意的函数或者数据到object参数中。在页面的函数中用this可以访问

示例代码:

//index.js
Page({
  data: {
    text: "This is page data."
  },
  onLoad: function(options) {
    // Do some initialize when page load.
  },
  onReady: function() {
    // Do something when page ready.
  },
  onShow: function() {
    // Do something when page show.
  },
  onHide: function() {
    // Do something when page hide.
  },
  onUnload: function() {
    // Do something when page close.
  },
  onPullDownRefresh: function() {
    // Do something when pull down.
  },
  onReachBottom: function() {
    // Do something when page reach bottom.
  },
  onShareAppMessage: function () {
   // return custom share data when user share.
  },
  onPageScroll: function() {
    // Do something when page scroll
  },
  // Event handler.
  viewTap: function() {
    this.setData({
      text: 'Set some data for updating view.'
    }, function() {
      // this is setData callback
    })
  },
  customData: {
    hi: 'MINA'
  }
})

初始化数据

初始化数据将作为页面的第一次渲染。data将会以JSON的形式由逻辑层传输到渲染层。所以数据必须是可以转成JSON格式的。字符串,数字,布尔值,对象,数组

<view>{{text}}</view>
<view>{{array[0].msg}}</view>

对应的在JS里面的data数据应该写成

Page({
 data:{
  text:"今天",
  array:[{msg:'1'},{msg:'2'}]
 }
})

生命周期函数

  • onLoad :页面加载

    一个页面只会调用一次,可以在onLoad中获取打开当前页面所调用的query参数

  • onShow:页面显示

    每次打开页面都会调用一次

  • onReady: 页面初次渲染完成

    一个页面只会调用一次,代码页面已经准备妥当,可以和视图层交互
    对界面的设置如:wx.setNavigationBarTitle请在onReady之后设置

  • onHide 页面隐藏

    当navigateTo或者底部tab切换的时候调用

  • onUnload: 页面卸载

    当redirectTo或者navigateBack的时候调用

页面相关事件处理函数

  • onPullDownRefresh :下拉刷新

    (1)监听用户下拉刷新事件。
    (2)必须需要在app.json的window选项中,或者在页面配置中开启enablePullDownRefresh
    (3)当处理完数据刷新后。wx.stopPullDownRefresh可以停止当前页面的刷新

  • onReachBottom:上拉触底

    (1)监听用户上拉触底事件。
    (2)可以在app.json里面的window选项中或者页面配置中设置触发距离onReachBottomDistance
    (3)在触发距离内滑动期间,本事件只会触发一次.

  • onPageScroll:页面滚动

    (1)监听用户滑动页面事件
    (2)参数为object包含以下字段.
    scrollTop 类型Num 页面在垂直方向已滚动的距离(单位Px)
    (3)代码如下:

onPageScroll:function(options){
    console.log(options.scrollTop);
    }
  • onShareAppMessage : 用户转发

    (1)只有定义了此事件处理函数,右上角菜单才会显示转发按钮.
    (2)用户点击转发按钮的时候就会调用
    (3)此事件需要return一个object用户自定义转发内容

  onShareAppMessage: function () {
  return {
    title: '页面的主标题',
    desc: '页面的描述',
    path: '/pages/index/index?id=123'
        }
      }

事件处理函数

(1)除了初始化数据和生命周期函数,我们还可以自定义事件处理函数,在组件中加入事件绑定,当达到触发事件就会执行Page中定义的事件处理函数.

示例代码:

<view bindtap = "clickme">点击我</view>

在逻辑层(js)

Page({
  clickme:function(){
  console.log('Hello world!')
  }
})

this.setData()

setData 函数用于将数据从逻辑层发送到视图层(异步),同时改变对应的this.data的值(同步)

setData()参数格式

  • data

类型object 必填:是 描述需要改变的数据

  • callback 类型function 必填:否 描述回调函数

object以key,value的形式表示将this.data中的key对应的值变成value!callback是一个回调函数,在这次setData对界面渲染完毕后使用。
其中key可以非常灵活,以数据路径的形式给出。如arr[2].message,a.b.c.d并且不需要再this.data中预先定义.

注意:
直接修改this.data而不调用this.setData 是无法改变页面的状态的。还会造成数据不一致。
单次设置的数据不能超过1024KB,避免一次设置过多的数据.

示例代码:

<view>{{text}}</view>
<button bindtap="changeText"> Change normal data </button>
<view>{{num}}</view>
<button bindtap="changeNum"> Change normal num </button>
<view>{{array[0].text}}</view>
<button bindtap="changeItemInArray"> Change Array data </button>
<view>{{object.text}}</view>
<button bindtap="changeItemInObject"> Change Object data </button>
<view>{{newField.text}}</view>
<button bindtap="addNewField"> Add new data </button>

在index.js文件里面

Page({
  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'
    })
  }
})

页面路由

在小程序中所有的页面的路由全部由框架进行管理

getCurrentPages()

getCurrentPages()函数用于获取到当前页面栈的实例,以数组形式按栈的顺序给出,第一个元素为首页,最后一个元素为当前页。

重要的事情说三遍。千万不要修改页面栈。千万不要修改页面栈。千万不要修改页面栈。

路由方式

  • 打开新页面:

    调用API wx.navigateTo
    或者组件<navigator open-type="navigateTo">

  • 页面重定向

    调用API wx.redirecTo
    或者使用组件<navigator open-type="redirectTo">

  • 页面返回

    调用API wx.navigateBack
    或者使用组件<navigator open-type="navigateBack">

  • Tab切换

    调用API wx.switchTab
    或者使用组件<navigator open-type="switchTab">

  • 重启动

    调用API wx.reLaunch
    或者使用组件<navigator open-type="reLaunch">

这几种路由跳转方式。对于前页面来说:
wx.navigateTo 对应的 onHide
wx.redirecTo 对应的 onUnload
wx.navigateBack 对应的onUnload

特别注意

  • navigateTo,redirectTo只能打开不是底部导航指定的页面
  • SwitchTab 只能打开tabBar页面
  • reLaunch 可以打开任意页面
  • 页面底部的tabBar由页面决定,即只要是定义了tabbar的页面,底部就有tabBar
  • 调用页面路由带的参数可以在目标页面的onLoad中获取
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,340评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,762评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,329评论 0 329
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,678评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,583评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,995评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,493评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,145评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,293评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,250评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,267评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,973评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,556评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,648评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,873评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,257评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,809评论 2 339

推荐阅读更多精彩内容

  • 昨天看了一下微信小程序官方文档,总结一下自己学习的个人心得. 首先从官方文档给的框架说起,微信小程序官方文档给出了...
    Mr大大大阅读 47,133评论 9 68
  • 微信小程序在无论在功能、文档及相关支持方面,都是优于前面几种微信账号类型,它提供了很多原生程序才有的接口,使得我们...
    未央大佬阅读 2,284评论 0 12
  • 前言: 上一篇文章我们介绍了.wxml和.wxss文件,这篇文章对js文件进行详细的讲解,首先贴上一个简单的js文...
    Smile__EveryDay阅读 20,073评论 0 7
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,559评论 18 139
  • 目标:4215 完成:399.8 差比:3815.2 累计没完成:18765 今天休息第一天上班,早上把仓库整理了...
    谭甜阅读 159评论 0 0