微信小程序 第二天

小程序生命周期函数

属性类型描述触发时机
onLaunchfunction监听小程序初始化当小程序初始化完成时,会触发onLaunch(全局只触发一次)
onShowfunction监听小程序显示当小程序启动,或从你后台进入前台显示,会触发onShow
onHidefunction监听小程序隐藏当小程序从前台进入后台,会触发onHide
onErrorfunction错误监听函数当小程序发生脚本错误,或者API田勇是没回触发onError并附带错误信息提示。

OnPageN

otFund

function页面不存在监听函数当小程序出现要打开的页面不存在的情况,会附带页面信息回调该函数。
其他any开发者可以添加任意的函数或数据到OBject参数中,用this可以使用

代码示例

APP({

                onLaunch:function(){

                        //初始化时执行

}

                onShow:function(){

                        //显示或进入前台时执行

}

                onHide:function(){

                        //隐藏或进入后台时执行

}

globalData:“i'm global data”

})

  • 在页面里调用app.js全局数据
  • 在页面js文件,按如下所示方法,就可以调用到全局数据globalData                                                        var AppInstance=getApp()                                                                                                      console.log(AppInstance.globalData)
  • 不仅可以调用全局数据,还可以调用自定义的函数,但是不要调用生命周期函数

注意

        App()必须在app.js中注册,且不能注册多个

        不要在定义于APP()内的函数中调用getApp(),使用this就可以获取app实例

        不要在onLoad的时候调用getCurrentPage(),时page还没有生成

        通过getApp()获取实例之后,不要私自调用生命周期函数

object参数说明

属性类型描述
dataObject页面的初始数据
onLoadfunction监听页面加载
onReadyfunction监听页面初次渲染完成
onShowfunction监听页面显示
onHidefunction监听页面隐藏
OnUnloadfunction监听页面卸载
onPullDownRefreshfunction监听用户下拉动作
onReachBottomfunction页面上拉触底时间的处理函数
onPageScrollfunction页面滚动触发事件的吹函数
onTabltemTapfunction当前是tab页时,点击tab时触发
onShareAppMessagefunction用户单机右上角分享
其他Any开发者可以添加任意的函数或数据到object参数中,在页面的函数中用this可以访问

配置函数代码

page({
    data:{
        text:'Hello World!'
    },
    onLoad:function(options){

    },

    onReady:function(options){

    },
    onShow:function(options){

    },
    onShareAppMessage:function(options){

    },
})

onLoad页面加载:一个页面值调用一次,接收页面参数可以获取wx.navigateTo和wx.redirectTo及<navigator>中的query

onShow页面显示:每次打开页面都会调用一次

onReady页面初次渲染完成:一个页面只调用一次,可和视图层进行交互,对界面的设置如wx.setNavigationBarTitle请在onReady之后设置

onHide页面隐藏:当调用navigateTo或底部tab切换时调用

onUnload页面卸载:当调用redirectTo或navigateBack的时候调用

onPullDownRefresh下拉刷新:监听用户下拉刷新事件,需要在config的windows选项中开启

enablePullDownRefresh。当处理完数据刷新后,wx.stopPullDownRefresh可以停止当前页面的下拉刷新

onShareAppMessage用户分享:只有定义了此事件处理函数,右上角菜单才会显示“分享”按钮,用户点击“分享”按钮的时候会调用次函数。此事件需要返回一个Object参数,用于自定义分享内容。

                                          分享参数及代码

page({
    onShareAppMessage:function(){
        return{
            title:‘自定义分享标题’
            desc: ‘自定义分享描述’
            path: ‘/page/user?id=123’
                    //必须是以/开头的完整路径
        },
    }
})

页面路由管理

        ✔微信小程序的页面路由都是由微信小程序框架来管理的

        ✔框架一栈的形式维护了所有页面

        ✔栈:一种数据结构

                ▶只能在一段进行插入和删除操作

                ▶按“后进先出”的原则存储数据

        ✔小程序页面交互也·是通过栈来完成

                ▶小程序初始化时,新页面入栈

                ▶打开新页面时,新页面入栈

                ▶页面重定向时,当前页面出栈

                ▶页面返回时,页面不断出栈,知道新页面入栈

                ▶tab切换时,页面全部出栈,只留下新的tab页面

路由触发方式及页面生命周期函数

页面路由方式触发时机路由后页面路由前页面
初始化小程序打开的第一个页面onLoad,onShow
打开新页面调用API   wx.navigateTo或使用组件<navigator open-type="navigate"/>onLoad,onShowonUnload
页面重定向

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

onLoad,onshowonUnload(多层页面返回,没个页面都会按顺序触发onUnload)
页面返回调用API wx.navigateBack或用户按左上角返回按钮onShow
tab切换function调用API wx.switchTab或使用组件<navigator open-type="switchTab"/> 或 用户切换tab

页面路由管理注意事项

  1. navigateTo,redirectTo只能打开非tabBar页面
  2. switchTab只能打开tabBar页面
  3. reLaunch可以打开任意页面
  4. 页面底部的tabBar由页面决定,即只要是定义为tabBar的页面,底部都有tabBar
  5. 调用页面路由带的参数可以在目标页面的onLoad中获取

 

自定义函数

       除了初始化数据 和声明周期函数,Page中还可以定义一些特殊的函数:事件处理函数

        在渲染层的组件中可以加入事件绑定

        当达到触发事件时,就会执行Page中定义的事件处理函数

自定义函数示例代码

//wxml文件
<view bindtap= "clickMe">点我</view>

//js文件
Page({
    clickMe:function(){
        console.log("view tap")
    }
})

setData 设值函数

Page.prototype.setData()设值函数用于将数据从逻辑层发送到视图层

同时改变对应的this.data 的值

setData()参数格式:

        接受一个对象,以key,value的形式表示this.data中的key对应的值改变成value。

其中key非常灵活,一数据路径的形式给出,如

<!-wxml->
<view>{{title}}</view>
<button bindtap="changeText">改变正常数据</button>
<view>{{array[0].text}}</view>
<button bindtap="changeItemInArray">改变数据</button>
<view>{{object.text}}</view>
<button bindtap="changeItemInObject">改变对象数据</button>
<view>{{newField.text}}</view>
<button bindtap="addNewField">增加新数据</button>

js

Page({
     data: {
        text: 'init data',
        array:[{text:'init data'}],
        object:{ text:'init data'}
     }, 
    changeText:function(){
        //this.data.text=changed data//错误,不能工作 
        this.setData({ text:'changed data'}) }, 
    changeltemInArray:function(){
        this.setData({'array[0].text':'changed data'}) }, 
    changeltemInObject:function(){
        this.setData({'object.text':'changed data'}) } , 
    addNewField:function(){
        this.setData({'newField.text:new data'}) }
})

注意事项

        直接修改this.data无效

        无法改变页面的状态

        还会造成数据不一致

        单词设置的数据不能超过1024kb,尽量避免一次性设置过多的数据

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值