微信小程序(二)框架

配置

配置app.json例子:

{
  "pages": [
    "pages/index/index",
    "pages/logs/index"
  ],
  "window": {
    "navigationBarTitleText": "Demo"
  },
  "tabBar": {
    "list": [{
      "pagePath": "pages/index/index",
      "text": "首页"
    }, {
      "pagePath": "pages/logs/logs",
      "text": "日志"
    }]
  },
  "networkTimeout": {
    "request": 10000,
    "downloadFile": 10000
  },
  "debug": true
}

app.json配置项列表

属性 类型 必填 描述
pages string array 设置页面路径
window object 设置默认页面的窗口表现
tabBar object 设置底部tab的表现
networkTimeout object 设置网络超时时间
debug boolean 设置是否开启debug模式

pages

接受一个数组,每一项都是字符串,来制定小程序由哪些页面组成。每一项代表对应页面的(路径+文件名)信息,数组的第一项代表小程序的初始页面,小程序中新增/减少页面,都需要对pages数组进行修改。

文件名不需要写文件后缀,因为框架会自动去寻找路径下的.json, .js,  .wxml.  .wxss 四个文件进行整合。

如开发目录为:

pages/

pages/index/index.wxml

pages/index/index.js

pages/index/index.wxss

pages/logs/logs.wxml

pages/logs/logs.js

app.js

app.json

app.wxss

则需要在 app.json 中写

{
  "pages":[
    "pages/index/index",
    "pages/logs/logs"
  ]
}

window

用于设置小程序的状态栏、导航条、标题、窗口背景色。

属性 类型 默认值 描述 最低版本
navigationBarBackgroundColor HexColor #000000 导航栏背景颜色,如"#000000"  
navigationBarTextStyle String white 导航栏标题颜色,仅支持 black/white  
navigationBarTitleText String   导航栏标题文字内容  
navigationStyle String default 导航栏样式,仅支持 default/custom。custom 模式可自定义导航栏,只保留右上角胶囊状的按钮 微信版本 6.6.0
backgroundColor HexColor #ffffff 窗口的背景色  
backgroundTextStyle String dark 下拉背景字体、loading 图的样式,仅支持 dark/light  
enablePullDownRefresh Boolean false 是否开启下拉刷新,详见页面相关事件处理函数  
onReachBottomDistance Number 50 页面上拉触底事件触发时距页面底部距离,单位为px

注:HexColor(十六进制颜色值),如"#ff00ff"

注:navigationStyle 只在 app.json 中生效。开启 custom 后,低版本客户端需要做好兼容。开发者工具基础库版本切到 1.7.0(不代表最低版本,只供调试用) 可方便切到旧视觉

如 app.json :

{
  "window":{
    "navigationBarBackgroundColor": "#ffffff",
    "navigationBarTextStyle": "black",
    "navigationBarTitleText": "微信接口功能演示",
    "backgroundColor": "#eeeeee",
    "backgroundTextStyle": "light"
  }
}

tabBar

如果小程序是一个多 tab 应用(客户端窗口的底部或顶部有 tab 栏可以切换页面),可以通过 tabBar 配置项指定 tab 栏的表现,以及 tab 切换时显示的对应页面。

Tip:

  1. 当设置 position 为 top 时,将不会显示 icon
  2. tabBar 中的 list 是一个数组,只能配置最少2个、最多5个 tab,tab 按数组的顺序排序。

属性说明:

属性 类型 必填 默认值 描述
color HexColor   tab 上的文字默认颜色
selectedColor HexColor   tab 上的文字选中时的颜色
backgroundColor HexColor   tab 的背景色
borderStyle String black tabbar上边框的颜色, 仅支持 black/white
list Array   tab 的列表,详见 list 属性说明,最少2个、最多5个 tab
position String bottom 可选值 bottom、top

其中 list 接受一个数组,数组中的每个项都是一个对象,其属性值如下:

属性 类型 必填 说明
pagePath String 页面路径,必须在 pages 中先定义
text String tab 上按钮文字
iconPath String 图片路径,icon 大小限制为40kb,建议尺寸为 81px * 81px,当 postion 为 top 时,此参数无效,不支持网络图片
selectedIconPath String 选中时的图片路径,icon 大小限制为40kb,建议尺寸为 81px * 81px ,当 postion 为 top 时,此参数无效

networkTimeout

可以设置各种网络请求的超时时间。

属性说明:

属性 类型 必填 说明
request Number wx.request的超时时间,单位毫秒,默认为:60000
connectSocket Number wx.connectSocket的超时时间,单位毫秒,默认为:60000
uploadFile Number wx.uploadFile的超时时间,单位毫秒,默认为:60000
downloadFile Number wx.downloadFile的超时时间,单位毫秒,默认为:60000

debug

可以在开发者工具中开启 debug 模式,在开发者工具的控制台面板,调试信息以 info 的形式给出,其信息有Page的注册页面路由数据更新事件触发 。 可以帮助开发者快速定位一些常见的问题。

page.json

每一个小程序页面也可以使用.json文件来对本页面的窗口表现进行配置。 页面的配置比app.json全局配置简单得多,只是设置 app.json 中的 window 配置项的内容,页面中配置项会覆盖 app.json 的 window 中相同的配置项。

页面的.json只能设置 window 相关的配置项,以决定本页面的窗口表现,所以无需写 window 这个键,如:

属性 类型 默认值 描述
navigationBarBackgroundColor HexColor #000000 导航栏背景颜色,如"#000000"
navigationBarTextStyle String white 导航栏标题颜色,仅支持 black/white
navigationBarTitleText String   导航栏标题文字内容
backgroundColor HexColor #ffffff 窗口的背景色
backgroundTextStyle String dark 下拉背景字体、loading 图的样式,仅支持 dark/light
enablePullDownRefresh Boolean false 是否开启下拉刷新,详见页面相关事件处理函数
disableScroll Boolean false 设置为 true 则页面整体不能上下滚动;只在 page.json 中有效,无法在 app.json 中设置该项
onReachBottomDistance Number 50 页面上拉触底事件触发时距页面底部距离,单位为px
{
  "navigationBarBackgroundColor": "#ffffff",
  "navigationBarTextStyle": "black",
  "navigationBarTitleText": "微信接口功能演示",
  "backgroundColor": "#eeeeee",
  "backgroundTextStyle": "light"
}

逻辑层(app service)

小程序开发框架的逻辑层由 JavaScript 编写。

逻辑层将数据进行处理后发送给视图层,同时接受视图层的事件反馈。

在 JavaScript 的基础上,我们做了一些修改,以方便地开发小程序。

  • 增加 App 和 Page 方法,进行程序和页面的注册。
  • 增加 getApp 和 getCurrentPages 方法,分别用来获取 App 实例和当前页面栈。
  • 提供丰富的 API,如微信用户数据,扫一扫,支付等微信特有能力。
  • 每个页面有独立的作用域,并提供模块化能力。
  • 由于框架并非运行在浏览器中,所以 JavaScript 在 web 中一些能力都无法使用,如 documentwindow 等。
  • 开发者写的所有代码最终将会打包成一份 JavaScript,并在小程序启动的时候运行,直到小程序销毁。类似 ServiceWorker,所以逻辑层也称之为 App Service。

App

App()

App() 函数用来注册一个小程序。接受一个 object 参数,其指定小程序的生命周期函数等。

object参数说明:

属性 类型 描述 触发时机
onLaunch Function 生命周期函数--监听小程序初始化 当小程序初始化完成时,会触发 onLaunch(全局只触发一次)
onShow Function 生命周期函数--监听小程序显示 当小程序启动,或从后台进入前台显示,会触发 onShow
onHide Function 生命周期函数--监听小程序隐藏 当小程序从前台进入后台,会触发 onHide
onError Function 错误监听函数 当小程序发生脚本错误,或者 api 调用失败时,会触发 onError 并带上错误信息
其他 Any   开发者可以添加任意的函数或数据到 Object 参数中,用 this 可以访问

前台、后台定义: 当用户点击左上角关闭,或者按了设备 Home 键离开微信,小程序并没有直接销毁,而是进入了后台;当再次进入微信或再次打开小程序,又会从后台进入前台。需要注意的是:只有当小程序进入后台一定时间,或者系统资源占用过高,才会被真正的销毁。

关闭小程序(基础库版本1.1.0开始支持): 当用户从扫一扫、转发等入口(场景值为1007, 1008, 1011, 1025)进入小程序,且没有置顶小程序的情况下退出,小程序会被销毁。

小程序运行机制在基础库版本 1.4.0 有所改变: 上一条关闭逻辑在新版本已不适用。详情

示例代码:

App({
  onLaunch: function(options) {
    // Do something initial when launch.
  },
  onShow: function(options) {
      // Do something when show.
  },
  onHide: function() {
      // Do something when hide.
  },
  onError: function(msg) {
    console.log(msg)
  },
  globalData: ‘I am global data‘
})

onLaunch, onShow 参数

字段 类型 说明
path String 打开小程序的路径
query Object 打开小程序的query
scene Number 打开小程序的场景值
shareTicket String shareTicket,详见 获取更多转发信息
referrerInfo Object 当场景为由从另一个小程序或公众号或App打开时,返回此字段
referrerInfo.appId String 来源小程序或公众号或App的 appId,详见下方说明
referrerInfo.extraData Object 来源小程序传过来的数据,scene=1037或1038时支持

场景值 详见

以下场景支持返回 referrerInfo.appId:

场景值 场景 appId 信息含义
1020 公众号 profile 页相关小程序列表 返回来源公众号 appId
1035 公众号自定义菜单 返回来源公众号 appId
1036 App 分享消息卡片 返回来源应用 appId
1037 小程序打开小程序 返回来源小程序 appId
1038 从另一个小程序返回 返回来源小程序 appId
1043 公众号模板消息 返回来源公众号 appId

getApp()

全局的 getApp() 函数可以用来获取到小程序实例。

// other.js
var appInstance = getApp()
console.log(appInstance.globalData) // I am global data

注意:

  • App() 必须在 app.js 中注册,且不能注册多个。
  • 不要在定义于 App() 内的函数中调用 getApp() ,使用 this 就可以拿到 app 实例。
  • 不要在 onLaunch 的时候调用 getCurrentPages(),此时 page 还没有生成。
  • 通过 getApp() 获取实例之后,不要私自调用生命周期函数。

场景值

基础库 1.1.0 开始支持,低版本需做兼容处理

当前支持的场景值有:

场景值ID 说明
1001 发现栏小程序主入口
1005 顶部搜索框的搜索结果页
1006 发现栏小程序主入口搜索框的搜索结果页
1007 单人聊天会话中的小程序消息卡片
1008 群聊会话中的小程序消息卡片
1011 扫描二维码
1012 长按图片识别二维码
1013 手机相册选取二维码
1014 小程序模版消息
1017 前往体验版的入口页
1019 微信钱包
1020 公众号 profile 页相关小程序列表
1022 聊天顶部置顶小程序入口
1023 安卓系统桌面图标
1024 小程序 profile 页
1025 扫描一维码
1026 附近小程序列表
1027 顶部搜索框搜索结果页“使用过的小程序”列表
1028 我的卡包
1029 卡券详情页
1030 自动化测试下打开小程序
1031 长按图片识别一维码
1032 手机相册选取一维码
1034 微信支付完成页
1035 公众号自定义菜单
1036 App 分享消息卡片
1037 小程序打开小程序
1038 从另一个小程序返回
1039 摇电视
1042 添加好友搜索框的搜索结果页
1043 公众号模板消息
1044 带 shareTicket 的小程序消息卡片(详情)
1047 扫描小程序码
1048 长按图片识别小程序码
1049 手机相册选取小程序码
1052 卡券的适用门店列表
1053 搜一搜的结果页
1054 顶部搜索框小程序快捷入口
1056 音乐播放器菜单
1057 钱包中的银行卡详情页
1058 公众号文章
1059 体验版小程序绑定邀请页
1064 微信连Wi-Fi状态栏
1067 公众号文章广告
1068 附近小程序列表广告
1071 钱包中的银行卡列表页
1072 二维码收款页面
1073 客服消息列表下发的小程序消息卡片
1074 公众号会话下发的小程序消息卡片
1078 连Wi-Fi成功页
1089 微信聊天主界面下拉
1090 长按小程序右上角菜单唤出最近使用历史
1092 城市服务入口

可以在 App 的 onlaunch 和 onshow 中获取上述场景值,部分场景值下还可以获取来源应用、公众号或小程序的appId。详见

Tip: 由于Android系统限制,目前还无法获取到按 Home 键退出到桌面,然后从桌面再次进小程序的场景值,对于这种情况,会保留上一次的场景值。

原文地址:https://www.cnblogs.com/learn-python/p/8460462.html

时间: 2024-08-29 00:13:48

微信小程序(二)框架的相关文章

谷歌app二次验证码与微信小程序二次验证码对比实测

下面我就跟大家实测一下关于两款验证码的使用对比 NO.1:下载安装 谷歌二次验证码下载方式如下: 1.通过扫描交易所中二维码(目前所有交易所中都是提供下载二维码的) 2.手机应用商店搜索"Google Authenticator"进行下载 微信小程序下载方式如下: 1.进入微信直接搜索"二次验证码"即可 1.谷歌需要去下载app(费流量,有wifi和土豪忽略),微信不需要,直接使用! 2.搜索方面谷歌需要一连串的英文字母,比较复杂这个对我而言就比较难接受了(我是英语

微信小程序二维码识别

目前市场上二维码识别的软件或者网站越来越多,可是真正方便,无广告的却少之很少. 于是,自己突发奇想做了一个微信二维码识别的小程序. 包含功能: 1.识别二维码 ①普通二维码 ②条形码 ③只是复制解析出来的数据 2.生成二维码 ①只是从粘贴板生成二维码 软件截图: 体验二维码: 以下为主要代码 index.js // pages/main/index.js var QR = require("../../utils/qrcode.js"); Page({ data: { canvasHi

微信小程序 原生框架 (分享方法封装)

封装的分享方法 1 function share(o,isDebug = false ) { 2 //路径 3 let url = o.url || getCurrentPages()[getCurrentPages().length - 1].route; 4 5 //当前路径所带参数 6 let urlParams = getCurrentPages()[getCurrentPages().length - 1].options; 7 8 isDebug&&console.log(`当

微信小程序(4)--二维码窗口

微信小程序二维码窗口: <view class="btn" bindtap="powerDrawer" data-statu="open">button</view> <!--mask--> <view class="drawer_screen" bindtap="powerDrawer" data-statu="close" wx:if=&qu

小程序-文章:微信小程序常见的UI框架/组件库总结

ylbtech-小程序-文章:微信小程序常见的UI框架/组件库总结 1.返回顶部 1. 想要开发出一套高质量的小程序,运用框架,组件库是省时省力省心必不可少一部分,随着小程序日渐火爆,各种不同类型的小程序也渐渐更新,其中不乏一些优秀好用的框架/组件库. 1:WeUI  小程序–使用教程 https://weui.io/ 官方介绍:WeUI 是一套同微信原生视觉体验一致的基础样式库,由微信官方设计团队为微信内网页和微信小程序量身设计,令用户的使用感知更加统一.小程序开发中最常用到的一款框架,受广大

一起脱去小程序的外套和内衣 - 微信小程序架构解析

版权声明:本文由渠宏伟  原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/760767001484042227 来源:腾云阁 https://www.qcloud.com/community 作者介绍: 渠宏伟,腾讯高级工程师,从事Web前端开发5年,先后负责企鹅电竞.腾讯视频VIP.腾讯OA开发框架.腾讯微信HR助手等项目.对Web前端架构..NET架构有丰富的经验. 微信小程序的公测掀起了学习小程序开发的浪潮,天生跨

你自认为了解微信小程序?醒醒吧!

小程序目前被炒得沸沸扬扬,无数业内业外人士都对此雄心勃勃,希望占据先机,借此一统江湖,千秋万代.这再次证明一点,微信想让什么火,什么就能火.这种能力目前在国内估计也是无人能出其右了-- 好了,废话不多话,言归正传.作为一个要成为成功人士的男人,利用国庆的时间,我好好的研究了一下微信小程序,发现网上很多言论对于微信小程序的言论,在一定区间存在理解上的误区.接下来的内容,我假定你已经初步的了解过微信小程序,如果你还不了解,请移步开发文档,然后再回来阅读本文. 一.小程序到底是不是Html5 关于这一

****微信小程序架构解析

| 导语   微信小程序的公测掀起了学习小程序开发的浪潮,天生跨平台,即用即走.媲美原生体验.完善的文档.高效的开发框架,小程序给开发者带来了很多惊喜.通过这篇文章和大家一起分析小程序的架构,分享开发经验. 一.小程序介绍 1.小程序特点 2.小程序演示 视频地址: https://v.qq.com/x/page/w0353d7co6y.html 3.小程序为什么那么快 Page Frame Native预先额外加载一个WebView当打开指定页面时,用默认数据直接渲染,请求数据回来时局部更新返

带你入门微信小程序

认识微信小程序 2016年1月9日,TX启动小程序研发,于2017年1月9日正式发布.不同于微信订阅号或公众号,微信小程序被赋予了应用程序的能力,他是一种无需安装即可使用的应用,它实现了应用“触手可及”的梦想,用户“扫一扫”或者“搜一搜”即可打开应用:体现了“用完就走”的理念,用户不再需要关心是否安装太多应用问题.应用将无处不在,随时随地可用,无需卸载. 微信小程序相关技术 微信小程序自定义了一套语言,称为WXML微信标记语言,它的使用方法类似于HTML语言.另外,微信小程序还定义了自己的样式语

微信小程序注册流程

响应公司号召,跟上时代潮流,接下来我将独自开发微信小程序,接下来我介绍下注册流程,后续会补上小程序开发心得. 注册流程 注册之前,需要使用一个邮箱,该邮箱作为登录小程序的账号,这个邮箱不能被微信开放平台注册,个人微信号绑定的邮箱,否则不予注册,迫不得已,找出了N年没用的QQ邮箱哈,注册之后往预留邮箱发送一封邮件,前往邮箱点击确认即可. 注册类型分为:个人.媒体.企业.政府机关.其它.对于我而言,只能先暂时使用个人进行注册了. 选择个人注册,需要使用本人身份证号.身份证对应姓名.还需要一个手机号,