一、框架简介
微信小程序框架是一种开发小程序的基础结构,它提供了一组规范和工具,用于构建、管理和运行微信小程序。微信小程序框架的主要作用是简化小程序开发过程,提供一种结构化的方式来组织代码,使开发者能够更轻松地创建小程序应用。以下是关于微信小程序框架的一些重要信息:
- 基本架构:微信小程序框架通常由三个主要部分组成:
- 逻辑层:这是小程序的核心,用于处理小程序的业务逻辑。逻辑层使用JavaScript编写,并包括页面逻辑、网络请求、数据处理等。
- 视图层:视图层负责渲染小程序的界面,通常使用WXML(类似于HTML)和WXSS(类似于CSS)来定义页面结构和样式。
- 配置:小程序的全局配置,包括小程序的名称、页面路径、tabBar等信息。
- 双向绑定:微信小程序框架支持数据的双向绑定,这意味着数据的变化会自动更新到页面上,而页面上的操作也可以反馈到数据模型中。这有助于实现实时的界面更新。
- 事件处理:框架提供了丰富的事件处理机制,允许开发者为页面元素绑定事件处理函数,例如点击事件、输入事件等。
- 小程序生命周期:框架定义了小程序的生命周期,包括onLoad、onShow、onReady、onHide、onUnload等生命周期函数,开发者可以在这些函数中执行特定的操作。
- 模块化开发:微信小程序框架支持模块化开发,允许开发者将代码划分为模块,提高了代码的可维护性和重用性。
- 网络请求:框架提供了内置的网络请求API,用于与服务器通信,获取数据并更新页面。
- 本地存储:小程序框架允许开发者使用本地存储功能,将数据保存在用户的设备上,以提高小程序的性能和用户体验。
- 第三方库支持:微信小程序框架支持使用第三方JavaScript库,以扩展小程序的功能和效率。
- 跨平台开发:微信小程序框架可以在不同平台上运行,包括iOS、Android和Web,这使得开发者可以更轻松地跨平台开发应用。
总的来说,微信小程序框架为开发者提供了一种方便、高效的方式来创建小程序应用。开发者可以使用框架提供的工具和规范来管理小程序的结构和功能,从而快速开发出具备良好用户体验的小程序应用。
二、视图层
2.1 简介
微信小程序框架的视图层是小程序应用的界面渲染部分,负责展示用户界面和处理用户交互。以下是有关微信小程序框架视图层的简介:
- WXML(WeiXin Markup Language):WXML是一种类似于HTML的标记语言,用于定义小程序的页面结构。与HTML不同,WXML更加精简,包含少量标签和属性,专注于描述页面的结构。在WXML中,你可以定义视图元素、组件、数据绑定等。
- WXSS(WeiXin Style Sheet):WXSS是一种类似于CSS的样式定义语言,用于控制小程序页面的样式。你可以在WXSS中定义样式规则,包括颜色、字体、布局等,然后将这些规则应用于WXML中的元素。微信小程序框架支持类似CSS的选择器,使样式定义更灵活。
- 组件:微信小程序框架提供了一系列内置组件,如
view
、text
、button
、image
等,用于构建页面元素。除了内置组件,你还可以创建自定义组件,以便在不同页面中重复使用相同的功能或界面元素。- 数据绑定:视图层支持数据绑定,这意味着你可以将数据绑定到页面上,实现数据的动态展示。通过使用双花括号
{{}}
,你可以将页面的元素和数据模型关联起来。当数据模型中的数据发生变化时,页面会自动更新以反映这些变化。- 事件处理:你可以在视图层中定义事件处理函数,以响应用户的交互操作,如点击事件、触摸事件等。事件处理函数通常使用
bind
和catch
前缀来绑定到相应的组件上。- 模板和条件渲染:微信小程序框架支持模板的使用,你可以将一组相同结构的元素封装为一个模板,并在不同位置引用它们,提高代码的重用性。另外,你可以使用条件渲染来控制在不同条件下渲染不同的内容。
- 页面栈管理:微信小程序框架维护了一个页面栈,允许你在不同页面之间进行导航。你可以通过
wx.navigateTo
、wx.redirectTo
等API来管理页面栈,实现页面之间的切换和导航。- 动画效果:视图层支持添加动画效果,通过
wx.createAnimation
和动画API来实现元素的平移、旋转、缩放等动画效果,增强用户体验。
总的来说,微信小程序框架的视图层提供了丰富的工具和功能,用于构建小程序的用户界面,实现数据展示、用户交互和界面美化。通过合理使用WXML、WXSS、组件和事件处理,开发者可以创建各种类型的小程序应用,从简单的信息展示页面到复杂的交互应用。
2.2 WXML语法演示
在进行代码演示前我们先新建四个今天要用的新页面,在昨天的代码上加上新的代码,如下:
"pages/a/a", "pages/b/b", "pages/c/c", "pages/d/d",
紧接着开发工具会自动生成目录,如下:
2.2.1 数据绑定
在a.wxml文件中加入以下代码,如下:
<!--pages/a/a.wxml--> <view>{{message}}</view>
然后在a.js中data下加入message代码,如下:
/** * 页面的初始数据 */ data: { message:'Hello 页面1!' },
模拟器展示效果如下:
2.2.2 列表渲染
在a.wxml中加入以下代码,如下:
<view wx:for="{{array}}"> {{item}} </view>
在a.js中加入以下代码,如下:
array:[1,2,3,4,5],
模拟器展示效果如下:
但是我们写小程序一般在数组中放的都是对象,那么代码应该如下:
在a.js加入:
users: [{ id: 1, name: '刘三金' }, { id: 2, name: '疯翰林' }, { id: 3, name: '丧表锅' }]
在a.wxml加入:
<view wx:for="{{users}}" wx:key="id">用户编号:{{item.id}};用户姓名:{{item.name}};</view>
模拟器展示效果如下:
2.2.3 条件渲染
在a.wxml中加入以下代码,如下:
<!--wxml--> <view wx:if="{{view == '1'}}"> "生命如同骑自行车,想要保持平衡就得不断前进。" — 阿尔伯特·爱因斯坦 </view> <view wx:elif="{{view == '2'}}"> "行动胜过千言万语。" — 狄奥尼修斯 </view> <view wx:else="{{view == '3'}}"> "时刻保持好奇心,保持学习的态度。" — 斯蒂芬·霍金 </view>
在a.js中data代码块下加入view,如下:
view:3
条件渲染演示效果如下:
2.2.4 模板
在a.wxml中加入以下代码,如下:
<!--wxml--> <template name="staffName"> <view> 炙热沙城II: {{firstName}}, 炼狱小镇: {{lastName}} </view> </template> <template is="staffName" data="{{...staffA}}"></template> <template is="staffName" data="{{...staffB}}"></template> <template is="staffName" data="{{...staffC}}"></template>
在a.js中data代码块下加入以下代码,如下:
staffA: {firstName: 'B1', lastName: '锅炉房'}, staffB: {firstName: 'XBOX', lastName: '旋梯'}, staffC: {firstName: '沙地', lastName: '连接'}
模拟器演示效果如下:
2.3 事件系统
事件使用:首先在a.wxml中加入以下代码:
<view id="tapTest" data-hi="找不到我吧" data-meetingSteate="1" bindtap="tapName"> 点我!!! </view>
然后在a.js中加入:
tapName: function(event) { console.log(event) },
模拟器效果展示如下:
那么当我们想拿到data-hi以及data-meetingSteate中的值时,我们可以进行以下操作:
在tapName代码块下加入:
console.log(event.target.dataset);
模拟器展示效果如下:
2.4 页面一级菜单展示及切换
参考微信开发文档,全局配置进行代码优化,如下:
在app.json中加入以下代码,如下:
"tabBar": { "list": [{ "pagePath": "pages/index/index", "text": "首页" }, { "pagePath": "pages/a/a", "text": "a页面" }, { "pagePath": "pages/b/b", "text": "b页面" }] },
然后把主页面挪到所有页面最上方,如下:
紧接着我们通过模拟器观看效果,如下:
这样我们的小程序页面一级菜单及切换就完成了。 那么假如我们现在还有一个c页面,并不在一级菜单栏中,又该如何跳转呢?这就牵扯到生命周期了,下面听博主娓娓道来。
2.5 a页面跳b页面界面内部按钮演示
在a.wxml中加入以下代码:
<button bindtap="atob">a页面跳b页面</button>
在a.js中加入以下代码:
atob:function() { wx.switchTab({ url: '/pages/b/b', }) },
然后保存重新编译代码打开模拟器查看演示效果,如下:
2.6 a页面跳c页面(不在一级菜单内的页面)
在a.wxml中加入按钮代码如下:
<button bindtap="atoc">a页面跳c页面</button>
在a.js中加入以下代码,如下:
atoc:function() { wx.navigateTo({ url: '/pages/c/c', }) },
模拟器展示如下:
接下来就是生命周期的理解了。
三、页面生命周期
3.1 详解
微信小程序的逻辑层生命周期是指在小程序的运行过程中,逻辑层(JavaScript 文件)中的不同生命周期函数被调用的顺序。这些生命周期函数允许你在不同的时刻执行特定的操作,以响应小程序的生命周期事件。以下是微信小程序逻辑层的主要生命周期函数及其调用顺序:
onAppLaunch(options)
:当小程序初始化启动时调用,只在小程序第一次启动时触发。onLaunch(options)
:当小程序初始化启动时调用,包括首次进入小程序和后台切前台。onShow(options)
:当小程序启动,或从后台切前台时调用,可以获得进入小程序的路径、场景值等信息。onHide()
:当小程序从前台切入后台时调用。onError(error)
:当小程序发生脚本错误或 API 调用失败时调用,可以用于监测和上报错误。onPageNotFound(options)
:当小程序页面不存在时触发,可以用于自定义页面不存在时的行为。onUnhandledRejection
:当 Promise 被 reject 且没有错误处理函数时,会触发此函数。onThemeChange
:当系统主题变化时,触发此函数。
除了上述的生命周期函数,逻辑层还可以定义页面级别的生命周期函数,这些函数通常在对应的页面文件中定义。例如:
onLoad(options)
:在页面加载时触发,可以获得页面跳转时传递的参数。onShow()
:当页面显示时触发。onReady()
:当页面初次渲染完成时触发,表示页面已经准备就绪。onHide()
:当页面从前台切入后台时触发。onUnload()
:当页面被销毁时触发,如页面被关闭或切换到其他页面。
这些生命周期函数允许你在不同的时机执行代码,以实现特定的功能和逻辑。理解这些生命周期函数的调用顺序对于开发小程序非常重要,因为它们决定了何时执行特定的操作,如数据加载、页面渲染、事件绑定等。
3.2 图解
官方图解生命周期:
3.3 代码预演
页面跳转的几种情况罗列:
- 一级跳一级
- 一级跳二级
- 二级跳二级
- 二级跳一级(通过js的路由方式去跳转页面)
- 页面隔代跳转 (即从a-b-c-d-a,从a页面跳到b页面依次跳转最后跳到d页面,然后从d页面直接跳转回a页面,这种情况下b页面跟c页面的数据到底会不会丢失?)
然后我们把四个界面的js页面中生命周期函数用console.log打印出来,如下:
/** * 生命周期函数--监听页面加载 */ onLoad(options) { console.log("a.onLoad"); }, /** * 生命周期函数--监听页面初次渲染完成 */ onReady() { console.log("a.onReady"); }, /** * 生命周期函数--监听页面显示 */ onShow() { console.log("a.onShow"); }, /** * 生命周期函数--监听页面隐藏 */ onHide() { console.log("a.onHide"); }, /** * 生命周期函数--监听页面卸载 */ onUnload() { console.log("a.onUnload"); },
3.3.1 一级跳一级
具体操作如下:
可以看到我们一级菜单跳一级菜单出发了三个生命周期函数,分别是:
index—>a
a.onLoad,a.onShow,a.onReady
a—>b
a.onHide,b.onLoad,b.onShow,b.onReady
3.3.2 一级跳二级
具体效果如下:
a—>c(一级跳二级)
a.onHide,c.onLoad,c.onShow,c.onReady
c—>a(二级返回一级)
c.onUnload,a.onShow
3.3.3 二级跳二级
为了演示需求,我们需要在二级菜单(即c页面添加按钮进行跳转),添加的代码如下:
在c.wxml中加入以下代码:
<button bindtap="ctod">c页面跳d页面</button> <button bindtap="ctob">c页面跳b页面</button>
在c.js中加入以下代码,如下:
ctod:function() { wx.navigateTo({ url: '/pages/d/d', }) }, ctob:function() { wx.switchTab({ url: '/pages/b/b', }) },
添加完之后我们就可以进行代码预演了,模拟器演示如下:
c—>d
c.onHide,d.onLoad,d.onShow,d.onReady
d—>c
d.onUnload,c.onShow
c—>a
c.onUnload,a.onShow
3.3.4 页面隔代跳转
模拟器代码预演操作如下:
a—>c—>d—>a
d.onUnload,c.onUnload,a.onShow
3.4 代码预演结果总结
- 一级不会销毁.
- 二级层级深的跳到层级低的会销毁.
- 二级层级低跳到高的只会隐藏.
- 隔代中间所有页面会被销毁.
四、收获
学习小程序框架页面生命周期是非常重要的,因为它们决定了小程序页面在不同阶段执行的操作。页面生命周期函数允许你在不同的时间点执行特定的逻辑,以确保你的小程序页面能够按照预期工作。
以下是一些关于小程序页面生命周期的收获:
通过充分理解这些生命周期函数,你可以更好地掌握小程序页面的开发和控制页面的行为。你可以在不同的生命周期函数中执行不同的操作,确保页面能够响应用户的操作和事件,以提供更好的用户体验。同时,你还可以利用生命周期函数来处理资源管理和性能优化,以确保小程序的流畅运行。
最后小程序框架语法详解以及页面生命周期的代码预演就到这里,祝大家在敲代码的路上一路通畅!