![微信小程序开发与运营](https://wfqqreader-1252317822.image.myqcloud.com/cover/975/32854975/b_32854975.jpg)
2.5 逻辑层文件
小程序的逻辑层文件分为项目逻辑文件和页面逻辑文件。
2.5.1 项目逻辑文件
项目逻辑文件app. js中可以通过App()函数注册小程序生命周期函数、全局属性和全局方法,已注册的小程序实例可以在其他页面逻辑文件中通过getApp()获取。
App()函数用于注册一个小程序,参数为Object,用于指定小程序的生命周期函数、用户自定义属性和方法,其参数如表2-7所示。
表2-7 项目逻辑文件配置项
![](https://epubservercos.yuewen.com/E048FF/17640061507545406/epubprivate/OEBPS/Images/figure_0045_0002.jpg?sign=1739674840-tvSWIjjxY0vzDi7w3Thu2qaNgN0CF5fJ-0-f3b2b52cd5da8cb8b3da50283a1886a7)
当启动小程序时,首先会依次触发生命周期函数onLanuch和onShow方法,然后通过app. json的pages属性注册相应的页面,最后根据默认路径加载首页;当用户单击左上角的“关闭”按钮或单击设备的Home键离开微信时,小程序没有被直接销毁,而是进入后台,这两种情况都会触发onHide方法;当用户再次进入微信或再次打开小程序时,小程序会从后台进入前台,这时会触发onShow方法。只有当小程序进入后台一段时间(或者系统资源占用过高)时,小程序才会被销毁。
我们在Demo2的app. js加入如图2-10所示的代码。
![](https://epubservercos.yuewen.com/E048FF/17640061507545406/epubprivate/OEBPS/Images/figure_0046_0001.jpg?sign=1739674840-S15DUAcYWmMnPUNXdz7r90IUham1PMVP-0-2f325303e667cd009888614296bb216b)
图2-10 app. js配置文件
保存并编译后,Console面板的显示效果如图2-11所示。
![](https://epubservercos.yuewen.com/E048FF/17640061507545406/epubprivate/OEBPS/Images/figure_0046_0002.jpg?sign=1739674840-mFqpqJbmC3oJOdZJqUpOOsZu4P61hkQK-0-8755051410ce30d613c1e253e313df30)
图2-11 小程序启动显示效果
小程序启动后首先触发onLaunch方法,然后触发onShow方法,在onShow方法中通过this参数获取自定义属性和自定义方法并显示。在其他逻辑文件中,开发者可以通过全局函数getApp()方法获取小程序实例,例如:
![](https://epubservercos.yuewen.com/E048FF/17640061507545406/epubprivate/OEBPS/Images/figure_0046_0003.jpg?sign=1739674840-jikTNIZGxKT1Fvb1ZFFhzIULeBtBxEms-0-fda2e2d379bd45dd05b02189672bd716)
2.5.2 页面逻辑文件
页面逻辑文件的主要功能有:设置初始数据;定义当前页面的生命周期函数;定义事件处理函数等。每个页面文件都有一个相应的逻辑文件,逻辑文件是运行在纯JavaScript引擎中。因此,在逻辑文件中不能使用浏览器提供的特有对象(document、window)及通过操作DOM改变页面,只能采用数据绑定和事件响应来实现。
在逻辑层,Page()方法用来注册一个页面,并且每个页面有且仅有一个,其参数如表2-8所示。
表2-8 页面逻辑文件配置项
![](https://epubservercos.yuewen.com/E048FF/17640061507545406/epubprivate/OEBPS/Images/figure_0047_0001.jpg?sign=1739674840-KgiW5gKSmpSiaoFEZdAu6N36bPEYhoeq-0-14da0ad38e4a99bd4233f1c2166fde2c)
1.设置初始数据
设置初始数据是对页面的第一次数据绑定。对象data将会以JSON(Javascript Object No-tation, JS对象简谱)的形式由逻辑层传至视图层。因此,数据必须是可以转成JSON的格式(字符串、数字、布尔值、对象、数组)。
视图层可以通过WXML对数据进行绑定。
数据初始、数据绑定及运行效果如图2-12所示。
![](https://epubservercos.yuewen.com/E048FF/17640061507545406/epubprivate/OEBPS/Images/figure_0048_0001.jpg?sign=1739674840-toDVeqipjaSR4M7oWrH54HGpW3R20uUy-0-362fab233ef887fbbfab492dfdabe79c)
图2-12 数据初始、数据绑定及运行效果
(a)数据初始;(b)数据绑定;(c)运行效果
2.定义当前页面的生命周期函数
在Page()函数的参数中,可以定义当前页面的生命周期函数。页面的生命周期函数主要有onLoad、onShow、onReady、onHide、onUnload。
■ onLoad页面加载函数。当页面加载完成后调用该函数。一个页面只会调用一次。该函数的参数可以获取wx. navigateTo和wx. redirectTo及<navigator/ >中的query。
■ onShow页面显示函数。当页面显示时调用该函数。每次打开页面都会调用一次。
■ onReady页面数据绑定函数。当页面初次数据绑定完成时调用该函数。一个页面只会调用一次,代表页面已经准备就绪,可以和视图层进行交互。
■ onHide页面隐藏函数。当页面隐藏时及当navigateTo或小程序底部进行tab切换时,调用该函数。
■ onUnload页面卸载函数。当页面卸载、进行navigateBack或redirectTo操作时,调用该函数。
例如,在index. js和news. js文件中加入如图2-13所示的代码。
![](https://epubservercos.yuewen.com/E048FF/17640061507545406/epubprivate/OEBPS/Images/figure_0048_0002.jpg?sign=1739674840-Ec5jKc3L7nGH1YFj29KIyGRoCEWiJe7b-0-403165e74d0bfb9eba08358c8506c4b2)
图2-13 index. js和news. js文件代码
(a)index. js;(b)news. js
保存并编译后,Console面板出现了如图2-14所示的效果。
![](https://epubservercos.yuewen.com/E048FF/17640061507545406/epubprivate/OEBPS/Images/figure_0049_0001.jpg?sign=1739674840-fRjTO08QZWzcyJTSSAXF1BR2oFjLetUU-0-d40bfc783efe7b7036723056fff81827)
图2-14 页面生命周期
单击“新闻”选项卡,Console面板出现如图2-15所示的效果。
![](https://epubservercos.yuewen.com/E048FF/17640061507545406/epubprivate/OEBPS/Images/figure_0049_0002.jpg?sign=1739674840-NaOlonDvZqwyz4lOXxDZ7p1CSzmsnIXe-0-32ed7fce121160e51baf7da3bccc6c47)
图2-15 新闻页面显示,首页隐藏
再次单击“首页”选项卡,Console面板出现如图2-16所示的效果。
![](https://epubservercos.yuewen.com/E048FF/17640061507545406/epubprivate/OEBPS/Images/figure_0049_0003.jpg?sign=1739674840-Op5XFwCkMKuZ3u1fu6g2ID5IdqGaGI4R-0-3ff5fd42f464935b2fbffd5f6fb44745)
图2-16 新闻页面隐藏,首页再次显示
3.定义事件处理函数
开发者在Page()中自定义的函数称为事件处理函数。视图层可以在组件中加入事件绑定,当达到触发事件时,小程序就会执行Page()中定义的事件处理函数。
示例代码如下:
![](https://epubservercos.yuewen.com/E048FF/17640061507545406/epubprivate/OEBPS/Images/figure_0050_0001.jpg?sign=1739674840-QlkLdVEDDc7ePmehVWN71nKftrgCubXz-0-b4c7a2eaf3f166ba3e02a2271753aba4)
4.使用setData更新数据
小程序在Page对象中封装了一个名为setData()的函数,用来更新data中的数据。函数参数为Object,以“key:value”对的形式表示将this. data中的key对应的值修改为value。
示例代码如图2-17所示。
![](https://epubservercos.yuewen.com/E048FF/17640061507545406/epubprivate/OEBPS/Images/figure_0050_0002.jpg?sign=1739674840-TeEu2aBfzo3HVBzGI1wRPXFLd8sCNGkm-0-f382a5df4a42a01de69185e937ab29d9)
图2-17 setData. js和setData. wxml文件代码
(a)setData. js文件代码
![](https://epubservercos.yuewen.com/E048FF/17640061507545406/epubprivate/OEBPS/Images/figure_0051_0001.jpg?sign=1739674840-GHDgS1JCOhAjavCou06fGkK3nlDFCUcp-0-0701a3e3d6327d0ac1c9b47a0c6f71a2)
图2-17 setData. js和setData. wxml文件代码(续)
(b)setData. wxml文件代码
保存并编译,代码修改前后的运行效果如图2-18所示。
![](https://epubservercos.yuewen.com/E048FF/17640061507545406/epubprivate/OEBPS/Images/figure_0051_0002.jpg?sign=1739674840-Em9PYQfPBLv0xDZVfymKWg1rTZOmrzQ5-0-e6b2de2ffdf03df63c4abe7eba454581)
图2-18 使用setData修改数据的运行效果
(a)修改前;(b)修改后