微信小程序开发学习笔记[2]

微信小程序开发学习笔记[2]


目录

微信小程序开发学习笔记[2]

 

一、小程序页面事件处理[下]

1.1、按钮事件

2.2、setData函数

2.3、解决多页面全局数据不同步的问题

二、JS代码的模块化

2.1、什么是js代码的模块化

2.2、例子演示


一、小程序页面事件处理[下]

1.1、按钮事件

当按钮按下时触发一个函数:

<!--secondpage.mxml-->
<view >这里是第二页</view>
<view>
<!--bindtap后面是要绑定的处理函数的名称-->
  <button size='mini'type='primary' bindtap="onTap">点我</button>
</view>
//secondpage.js
onTap:function(){
    console.log("onTap is called");
  }

2.2、setData函数

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

<!--secondpage.wxml-->
<view >这里是第二页</view>
<view>
<!--bindtap后面是要绑定的处理函数的名称-->
  <view>当前数字:{{localData}}</view>
  <button size='mini'type='primary' bindtap="onTap">点我加一</button>
</view>
/**
   * secondpage.js
   * 页面的初始数据
   */
  data: {
    localData:0
  },
  onTap: function () {
    console.log("onTap is called");
    this.setData({
      localData:++this.data.localData
    })
    
  }

2.3、解决多页面全局数据不同步的问题

问题描述:一个全局数据globalData,在多个页面都可以访问,当在某页面把数据更改时(例如在secondpage更改)切回firstpage时,页面显示的还是原来的数据。

问题根源:当从firstpage切换到secondpage后,firstpage进行了隐藏显示secondpage,此时firstpage在后面隐藏着,切回来时,页面并没有进行刷新。

解决办法:在firstpage.js的onShow()函数里对数据进行刷新,亦即重新赋值一次。

<!--firstpage.wxml-->
<view >这里是第二页</view>
<view>
<!--bindtap后面是要绑定的处理函数的名称-->
  <view>局部当前数字:{{localData}}</view>
  <button size='mini'type='primary' bindtap="onTap">点我局部加一</button>
</view>
<view>
<!--bindtap后面是要绑定的处理函数的名称-->
  <view>全局当前数字:{{globalData}}</view>
  <button size='mini'type='primary' bindtap="onGlobalTap">点全局我加一</button>
</view>
//pages/secondpage/secondpage.js
var app=getApp();
Page({

  /**
   * 页面的初始数据
   */
  data: {
    localData:0,
    globalData:app.globalData
  },
  onTap: function () {
    console.log("onTap is called");
    this.setData({
      localData:++this.data.localData
    })
    
  },
  onGlobalTap: function () {
    console.log("onTap is called");
    this.setData({
      globalData: ++app.globalData
    })
})
<!--firstpage/firstpage.wxml-->
<text>hello world</text>
<view>全局变量:{{globalData}}</view>

<!--页面调转-->
<navigator open-type='redirect' url="../log/log">点我调转</navigator>
<navigator open-type='navigate' url='../log/log'>点我跳转2</navigator>
//firstpage.js
onShow: function () {
    this.setData({
      globalData: app.globalData
    })
   
  }

二、JS代码的模块化

2.1、什么是js代码的模块化

将一些公共的代码抽离成为一个单独的js 文件,作为一个模块,此即js代码的模块化。模块只有通module.exports或者exports才能对外暴露接口。

2.2、例子演示

  • 在项目目录下新建utils文件夹
  • 在utils文件夹下新建一个单独的js文件,此处我新建一个test.js
//utils/test.js
function sayHello(str){
  console.log("hello "+ str);
}

//暴露给外部的接口名字:本文件中接口的名字
module.exports={
  say:sayHello
}
  • 在firstpage中使用接口 需要先使用require导入当前文件
//导入test.js
var test = require("../../utils/test.js");
Page({
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    test.say("pig");
  }

})

 

 

 

 

 

 

 

 

 

 

 

 

 

发布了30 篇原创文章 · 获赞 58 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/annjeff/article/details/85792921