微信小程序学习笔记 (小程序页面学习 二 逻辑层 page.js 基础食用方法)

目录结构
目录结构
这是我小程序的目录结构

页面学习

逻辑层(App Service)

   小程序开发框架的逻辑层由 JavaScript 编写。
   逻辑层将数据进行处理后发送给视图层,同时接受视图层的事件反馈。
   在JavaScript 的基础上,我们做了一些修改,以方便地开发小程序。
    ¤ 增加AppPage方法,进行程序和页面的注册。
    ¤ 增加getAppgetCurrentPages 方法,分别用来获取 App 实例和当前页面栈。
    ¤ 提供丰富的API,如微信用户数据,扫一扫,支付等微信特有能力。
    ¤ 每个页面有独立的作用域,并提供模块化能力。
    ¤ 由于框架并非运行在浏览器中,所以JavaScript 在 web 中一些能力都无法使用,如 documentwindow 等。
    ¤ 开发者写的所有代码最终将会打包成一份JavaScript,并在小程序启动的时候运行,直到小程序销毁。类似 ServiceWorker,所以逻辑层也称之为 App Service。

page.js

page,js 是指每一个页面的js文件, 名字不一定是page.js, 但是必须和页面的名字一致, 让我们先看看官方对page.js内容的解释

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

哦,原来和那个 app.js 差不多,也是需要有一个函数, 而且和 App() 差不多, 都需要一个object 参数,这个经历过app.js我们也能明白这个参数的意思了, 让我们看看官方的解释

属性类型描述
dataObject页面的初始数据
onLoadFunction生命周期函数-监听页面加载
onReadyFunction生命周期函数-监听页面初次渲染完成
onShowFunction生命周期函数-监听页面显示
onHideFunction生命周期函数-监听页面隐藏
onUnloadFunction生命周期函数-监听页面卸载
onPullDownRefreshFunction页面相关事件处理函数-监听用户下拉动作
onReachBottomFunction页面上拉触底事件的处理函数
onShareAppMessageFunction用户点击右上角转发
onPageScrollFunction页面滚动触发事件的处理函数
onTabitemTapFunction当前是tab页时,点击tab时触发
其他Any开发者可以添加任意的函数或数据到object参数中,在页面的函数中用this 可以访问

接下来我将对上面的函数进行分步测试 data, onTabitemTap 不做测试, 以后会有演示的

初始化数据

  1. data
    说明    作为页面的第一次渲染, 传递的是一个对象, data将会以json数据的形式由逻辑层传至渲染层, 所以数据必须是可以转化为json的格式, 字符串, 数字, 布尔值, 对象, 数组, 渲染层的绑定,在渲染层我们再说.
    data代码演示

    data: {
            logs: []
          }
    

生命周期函数

  1. onLoad :
    说明    页面加载,每个页面仅仅只会调用一次,可以获取打开当前页面的query参数,query没测试到用处,暂时没说明
    示例代码

    /**
    *监听页面加载
    */
    onLoad: function () {
        console.log("logs-页面加载");
        this.setData({
          logs: (wx.getStorageSync('logs') || []).map(log => {
            return util.formatTime(new Date(log))
          })
        })
    }

    运行效果
    onLoad

  2. onReady
    说明    每个页面只会调用一次
    示例代码

    /**
    *生命周期函数监听页面初次渲染完成
    */
    onReady: function () {
      console.log("index-onReady");
    }

    运行效果
    onReady

  3. onShow
    说明    每次打开都会调用一次
    示例代码

    /**
    *生命周期函数-监听页面显示 --- 此页面显示时调用
    */
    onShow: function () {
    console.log("index-onShow");
    }

    运行效果
    onShow

  4. onHide
    示例代码

     /**
    *生命周期函数-监听页面隐藏
    */
    onHide: function () {
        console.log("index-onHide");
    }

    运行效果
    onHide

  5. onUnload
    说明    当页面从页面栈中弹出时调用
    示例代码

    /**
     *生命周期函数-监听页面卸载
     */
    onUnload: function () {
        console.log("index-onUnload");
    }

    运行效果

onUnload

页面相关事件处理函数

  1. onPullDownRefresh
    说明    下拉刷新
    示例代码

    /**
     *下拉监听事件
     */
    onPullDownRefresh: function () {
        console.log("index-下拉");
    }

    运行效果
    onPullDownRefresh

    1. onReachBottom
      说明    上拉触底,具体设置在 json 中配置
      示例代码
      /**
       *页面上拉触底监听事件
       */
      onReachBottom: function () {
          console.log("index-上拉触底");
      }

    运行效果

    onReachBottom

  2. onShareAppMessage
    说明    用户转发, 只有定义了此事件处理函数, 转发菜单才会显示“转发”按钮, 需要return 一个 Object, 自定义转发内容
    示例代码

    /**
     *用户点击右上角转发并选择转发时触发触发
     */
    onShareAppMessage: function () {
        console.log("用户点击转发");
        return {
          title : "自定义转发器",
          path : "/pages/index/index"
        }
    }

    运行效果
    我先编译没写的, 之后又编译了加上的,可以发现没写这个函数,是没法进行转发操作的,没有返回标题和路径版
    onShareAppMessage
    返回标题和路径的
    onShareAppMessage

  3. onPageScroll
    说明    页面滚动, 可以接收一个参数 参数中的scrollTop表明页面垂直距顶部距离
    示例代码

    /**
     *在用户滚动页面时触发, 频率极高
     */
    onPageScroll: function (scrollTop) {
        console.log("用户滚动页面 已滚动距离->" +scrollTop +"px")
    }

    运行效果
    onPageScroll

事件处理函数

当然在page.js中也可以定义事件处理函数, 只需在渲染层中加入事件绑定即可,当达到触发事件时就会执行对应的处理函数
代码示例
logs.wxml

    <view>
        <button bindtap='buttonTap' >click</button>
    </view>

logs.js

    buttonTap : function(){
        console.log("index-buttonTap");
    }

运行效果
事件处理

Page.prototype.route

route使用方式, 在js文件内通过 this.route 来调用
代码演示

buttonTap : function(){
    console.log("index-buttonTap");
    console.log(this.route);
}

效果
Page.prototype.route

Page.prototype.setData()

字段类型必填描述最低版本
dataObject要修改的数据
callbackFunction回调函数1.5.0

Object 是以 key:value键值对的形式表示, 作用就是讲this.data 对应的值改为value , callback 是一个回调函数,在设置值结束后调用, 其中key十分的灵活,以数据路径给出, 等会儿会给出演示, 而且不需要再this.data中预先定义
注意事项

   直接修改 this.data 而不调用 this.setData 是无法改变页面的状态的,还会造成数据不一致。
   单次设置的数据不能超过1024kB,请尽量避免一次设置过多的数据。
   请不要把 data 中任何一项的 value 设为 undefined ,否则这一项将不被设置并可能遗留一些潜在问题。

友情提示 :
callback 不能调用js中的方法, 估计是因为,在函数对象被传过去后, 无法找到原来的函数,暂时未找到解决方案

代码展示
logs.wxml

    <view>
        <button bindtap='buttonTap' >click</button>
        <text>{{msg}}</text>
    </view>

logs.js

    buttonTap : function(){
        //测试点击事件
        console.log("index-buttonTap");
        //测试 Page.prototype.route
        console.log(this.route);
        //测试 Page.prototype.setData()
        this.setData({
          msg:"buttonTap"
        },
        //回调函数
        function(){
          console.log("logs-myCallback");
        });
    }

运行效果
Page.prototype.setData()

Page实例的生命周期

page的生命周期, 看看即可,
Page实例的生命周期

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值