创建页面
对于 Mpx 项目中的每个页面,都需要在对应的 .mpx 文件中进行定义,指定页面的初始数据、生命周期回调、事件处理函数等,并且在 app.mpx 中通过 pages 数组进行注册。
<!-- app.mpx -->
<script type="application/json">
{
"pages": [
"./pages/index",
"./pages/second"
]
}
</script>页面模板
页面模板的写法与组件模板相同,具体可参考模版语法。页面模板与页面数据结合后生成的节点树,将被渲染到页面上。
页面构造
createPage 是 Mpx 提供的用于构造页面的方法,它接受一个 Object 类型的参数,指定页面的初始数据、生命周期回调、事件处理函数等。
<script>
import { createPage } from '@mpxjs/core'
createPage({
data: {
text: 'Init Data'
},
onLoad (options) {
// Do some initialize when page load.
console.log('Page Load')
},
onReady () {
// Do something when page ready.
console.log('Page Ready')
},
onShow () {
// Do something when page show.
console.log('Page Show')
},
onHide () {
// Do something when page hide.
console.log('Page Hide')
},
onUnload () {
// Do something when page close.
console.log('Page Unload')
},
onPullDownRefresh () {
// Do something when pull down.
console.log('Pull Down Refresh')
},
onReachBottom () {
// Do something when page reach bottom.
console.log('Reach Bottom')
},
onShareAppMessage () {
// return custom share data when user share.
console.log('Share App Message')
return {
title: 'My Mpx Page'
}
},
methods: {
// 自定义方法
changeText () {
this.text = 'Changed Data'
}
}
})
</script>
<script type="application/json">
{
"navigationBarTitleText": "首页",
"usingComponents": {}
}
</script>
<style>
.container {
padding: 20px;
}
</style>页面构造选项
Mpx 中页面的构造选项与组件高度一致,支持 data、computed、watch、methods 等选项。
| 选项 | 说明 | 详细介绍 |
|---|---|---|
| data | 页面的初始数据 | data |
| computed | 计算属性,用于声明依赖于其他数据的计算属性 | computed |
| watch | 侦听器,用于监听数据的变化并执行相应的回调 | watch |
| methods | 页面方法,包括事件响应函数和任意的自定义方法 | methods |
| provide / inject | 依赖注入,用于跨层级组件分发数据 | provide / inject |
| setup | 组合式 API 入口,返回页面所需的数据和方法 | setup |
注意
- Mpx 底层默认使用 Component 构造器创建页面,因此自定义方法需要放置在
methods选项中,这与原生小程序 Page 构造器直接挂载在配置对象下不同。- Mpx 对
data进行了响应式处理,直接修改this.text = 'xxx'即可驱动视图更新,无需调用this.setData。
页面生命周期
onLoad(Object query) 页面加载时触发。一个页面只会调用一次,可以在 onLoad 的参数中获取打开当前页面路径中的参数。
query(Object): 打开当前页面路径中的参数
onShow() 页面显示/切入前台时触发。
onReady() 页面初次渲染完成时触发。一个页面只会调用一次,代表页面已经准备妥当,可以和视图层进行交互。
onHide() 页面隐藏/切入后台时触发。
onUnload() 页面卸载时触发。
onPullDownRefresh() 监听用户下拉刷新事件。
onReachBottom() 监听用户上拉触底事件。
onShareAppMessage(Object object) 监听用户点击页面内转发按钮(button 组件 open-type="share")或右上角菜单“转发”按钮的行为,并自定义转发内容。
onPageScroll(Object object) 监听用户滑动页面事件。
onResize(Object object) 页面尺寸改变时触发。
onTabItemTap(Object object) 当前是 tab 页时,点击 tab 时触发。
页面实例方法
页面实例除了具备组件实例的大部分方法外,还具有一些特有的属性和方法。
| 方法/属性 | 说明 | 详细介绍 |
|---|---|---|
| route | 当前页面的路径,类型为 String | - |
| getPageId | 返回页面标识符 | getPageId |
| selectComponent | 使用选择器选择组件实例节点 | selectComponent |
| selectAllComponents | 使用选择器选择组件实例节点,返回全部匹配节点 | selectAllComponents |
| createSelectorQuery | 创建一个 SelectorQuery 对象 | createSelectorQuery |
| createIntersectionObserver | 创建一个 IntersectionObserver 对象 | createIntersectionObserver |
| $watch | 动态创建一个侦听器 | $watch |
| $forceUpdate | 强制更新视图 | $forceUpdate |
| $nextTick | 延迟到下次 DOM 更新循环之后执行 | $nextTick |
| $set | 向响应式对象中添加一个 property | $set |
| $delete | 删除对象的 property | $delete |
页面样式
页面样式主要用于控制页面内的元素外观,在 Mpx 中,样式直接编写在 .mpx 单文件中的 <style> 标签内。
全局样式与局部样式
定义在 app.mpx 的 <style> 标签中的样式为全局样式,作用于每一个页面。在页面的 .mpx 文件中 <style> 标签定义的样式为局部样式,只作用于当前页面,并会覆盖全局样式中相同的选择器。
<!-- app.mpx -->
<style>
.container {
padding: 20px;
}
</style>
<!-- page.mpx -->
<style>
.container {
padding: 10px; /* 覆盖全局样式 */
}
</style>样式导入
可以使用 @import 语句导入外联样式表。
<style>
@import './common.wxss';
.page-container {
background-color: #f8f8f8;
}
</style>页面配置
app.json 中的部分配置,也支持对单个页面进行配置,可以在页面对应的 <script type="application/json"> 块中来对本页面的表现进行配置。
页面中配置项在当前页面会覆盖 app.json 中相同的配置项(样式相关的配置项属于 app.json 中的 window 属性,但这里不需要额外指定 window 字段)。
配置项
| 属性 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| navigationBarBackgroundColor | HexColor | #000000 | 导航栏背景颜色,如 #000000 |
| navigationBarTextStyle | string | white | 导航栏标题、状态栏颜色,仅支持 black / white |
| navigationBarTitleText | string | 导航栏标题文字内容 | |
| navigationStyle | string | default | 导航栏样式,仅支持 default/custom |
| backgroundColor | HexColor | #ffffff | 窗口的背景色 |
| backgroundTextStyle | string | dark | 下拉 loading 的样式,仅支持 dark / light |
| enablePullDownRefresh | boolean | false | 是否开启当前页面下拉刷新 |
| onReachBottomDistance | number | 50 | 页面上拉触底事件触发时距页面底部距离,单位为px |
| disableScroll | boolean | false | 设置为 true 则页面整体不能上下滚动 |
| usingComponents | Object | 否 | 页面自定义组件配置 |
配置示例
<script type="application/json">
{
"navigationBarBackgroundColor": "#ffffff",
"navigationBarTextStyle": "black",
"navigationBarTitleText": "微信接口功能演示",
"backgroundColor": "#eeeeee",
"backgroundTextStyle": "light"
}
</script>更多配置项细节请参考小程序页面配置