上一篇介绍了关于.json 的配置文件,本篇介绍关于.js 逻辑层文件

微信小程序-05-详解介绍.js 逻辑层文件

文件目录结构

  • 之前大概提高到,没有细说
  • 先打开 app.js 文件

小程序 App

  • 打开 app.js 文件,会看到 App({...}) 函数
  • App() 函数用来注册一个小程序。接受一个 Object 参数,其指定小程序的生命周期回调等
  • 【注意】:App() 必须在 app.js 中调用,必须调用且只能调用一次。不然会出现无法预期的后果
  • Object参数说明:
属性 类型 描述 触发时机
onLaunch Function 生命周期回调一监听小程序初始化 小程序初始化完成时(全局只触发一次)
onShow Function 生命周期回调一监听小程序显示 小程序启动,或从后台进入前台显示时
onHide Function 生命周期回调一监听小程序隐藏 小程序从前台进入后台时
onError Function 错误监听函数 小程序发生脚本错误,或者 api 调用失败时触发 ,会带上错误信息
onPageNotFound Function 页面不存在监听函数 小程序要打开的页面不存在时触发,会带上页面信息回调该函数
其他 Any 开发者可以添加任意的函数或数据到 Object 参数中,用 this 可以访问
  • 前台、后台定义:当用户点击左上角关闭,或者按了设备 Home 键离开微信(也就是返回手机桌面,没有退出微信),小程序并没有直接销毁,而是进入了后台;当再次进入微信或再次打开小程序,又会从后台进入前台。需要注意的是:只有当小程序进入后台一定时间,或者系统占用资源过高,才会真正被销毁
  • 关闭小程序(基础库版本1.1.0开始支持):当用户从扫一扫 ,转发等入口(场景值(下面有介绍)为1007,1008,1011,1025)进入小程序,且没有置顶小程序的情况下推出,小程序会被销毁
  • 小程序运行机制在基础库版本 1.4.0 有所改变:上一条关闭逻辑在新版已不适用
  • 示例代码:
//提示:当在js文件中输入app会提示函数,直接回车会直接生产4个框架,快捷
App({ /**
* 当小程序初始化完成时,会触发 onLaunch(全局只触发一次)
*/
onLaunch: function () { }, /**
* 当小程序启动,或从后台进入前台显示,会触发 onShow
*/
onShow: function (options) { }, /**
* 当小程序从前台进入后台,会触发 onHide
*/
onHide: function () { }, /**
* 当小程序发生脚本错误,或者 api 调用失败时,会触发 onError 并带上错误信息
*/
onError: function (msg) { }
/**
* 下面是自定义内容
*/
globalData: 'I am global data'
})

详细介绍.js 文件中App({...})函数各参数

  • 上面提到的 5 个参数
  • onLaunch,onShow,onHide,onError,onPageNotFound

js 文件中App({...})函数参数 - onLaunch(Object)

  • 小程序初始化完成时触发,全局只触发一次
  • Object 参数说明:
字段 类型 说明
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

js 文件中App({...})函数参数 - onShow(Object)

  • 小程序启动,或从后台进入前台显示时触发
  • Object 参数说明:
  • 与上面 onLaunch 相同

js 文件中App({...})函数参数 - onHide()

  • 小程序从前台进入后台时触发

js 文件中App({...})函数参数 - onError(String error)

  • 小程序发生脚本错误,或者 api 调用失败时触发
  • 参数说明:
名称 类型 说明
error String 错误信息,包含堆栈

js 文件中App({...})函数参数 - onPageNotFound(Object)

  • 基础库 1.9.90 开始支持,低版本需做兼容处理
  • 小程序要打开的页面不存在时触发
  • Object 参数说明:
字段 类型 说明
path String 不存在的页面路径
query Object 打开不存在的页面的 query
isEntryPage Boolean 是否本次启动的首个页面(例如从分享等入口进来,首个页面是开发者配置的分享页面)
  • 开发者可以在 onPageNotFound 回调中进行重定向处理,但必须在回调中同步处理,异步处理(例如 setTimeout 异步执行)无效
  • 示例代码:
App({
onPageNotFound(res) {
wx.redirectTo({
url: 'pages/...'
}) // 如果是 tabbar 页面,请使用 wx.switchTab
}
})
  • 注意:

    • 1.如果开发者没有添加 onPageNotFound 监听,当跳转页面不存在时,将推入微信客户端原生的页面不存在提示页面
      1. 如果 onPageNotFound 回调中又重定向到另一个不存在的页面,将推入微信客户端原生的页面不存在提示页面,并且不再回调 onPageNotFound

getApp(Object)

  • 全局的 getApp() 函数可以用来获取到小程序 App 实例
  • Object 参数说明:
字段 类型 说明 最低版本
allowDefault Boolean 在 App 未定义时返回默认实现。当App被调用时,默认实现中定义的属性会被覆盖合并到App中。一般用于[独立分包](https://developers.weixin.qq.com/miniprogram/dev/framework/subpackages/independent.html) 2.2.4
  • 示例代码:
// 自定义的.js
var appInstance = getApp()
console.log(appInstance.globalData) // I am global data
  • 注意:

    • 不要在定义于 App() 内的函数中调用 getApp() ,使用 this 就可以拿到 app 实例
    • 通过 getApp() 获取实例之后,不要私自调用生命周期函数

场景值

  • 基础库 1.1.0 开始支持,低版本需做兼容处理
  • 当前支持的场景值有:
场景值ID 说明
1001 发现栏小程序主入口,“最近使用”列表(基础库2.2.4版本起将包含“我的小程序”列表)
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 的小程序消息卡片 详情
1045 朋友圈广告
1046 朋友圈广告详情页
1047 扫描小程序码
1048 长按图片识别小程序码
1049 手机相册选取小程序码
1052 卡券的适用门店列表
1053 搜一搜的结果页
1054 顶部搜索框小程序快捷入口
1056 音乐播放器菜单
1057 钱包中的银行卡详情页
1058 公众号文章
1059 体验版小程序绑定邀请页
1064 微信连Wi-Fi状态栏
1067 公众号文章广告
1068 附近小程序列表广告
1069 移动应用
1071 钱包中的银行卡列表页
1072 二维码收款页面
1073 客服消息列表下发的小程序消息卡片
1074 公众号会话下发的小程序消息卡片
1077 摇周边
1078 连Wi-Fi成功页
1079 微信游戏中心
1081 客服消息下发的文字链
1082 公众号会话下发的文字链
1084 朋友圈广告原生页
1089 微信聊天主界面下拉,“最近使用”栏(基础库2.2.4版本起将包含“我的小程序”栏)
1090 长按小程序右上角菜单唤出最近使用历史
1091 公众号文章商品卡片
1092 城市服务入口
1095 小程序广告组件
1096 聊天记录
1097 微信支付签约页
1099 页面内嵌插件
1102 公众号 profile 页服务预览
1103 发现栏小程序主入口,“我的小程序”列表(基础库2.2.4版本起该场景值废弃)
1104 微信聊天主界面下拉,“我的小程序”栏(基础库2.2.4版本起该场景值废弃)
  • 可以在 App 的 onLaunch 和 onShow 中获取上述场景值,部分场景值下还可以获取来源应用、公众号或小程序的appId

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

更多文章链接:微信小程序

微信小程序-05-详解介绍.js 逻辑层文件的更多相关文章

  1. 微信小程序-06-详解介绍.js 逻辑层文件-注册页面

    上一篇介绍的是 app.js 逻辑层文件中注册程序,对应的每个分页面都会有的 js 文件中 page() 函数注册页面 微信小程序-06-详解介绍.js 逻辑层文件-注册页面 宝典官方文档: http ...

  2. 微信小程序开发教程(七)逻辑层——.js详解

    逻辑层,是事务逻辑处理的地方.对于小程序而言,逻辑层就是.js脚本文件的集合.逻辑层将数据进行处理后发送给视图层,同时接收视图层的事件反馈. 微信小程序开发框架的逻辑层是由JavaScript编写.在 ...

  3. 微信小程序组件——详解wx:if elif else的用法

    背景 在学习微信小程序开发wxml页面时,需要使用if,else来判断组件是否进行展示,代码如下 <view wx:if="{{is_login==1}}">成功登录& ...

  4. 网页程序迁移至微信小程序web-view详解

    小程序现在越来越流行,但是公司的很多项目都是用网页写的,小程序语法不兼容原生网页,使得旧有项目迁移至小程序代价很高: 小程序之前开放了webview功能,可以说是网页应用的一大福音了,但是微信的web ...

  5. 微信小程序开发详解——小程序,大颠覆!

    微信小程序开发 联系 苏念 188.1414.7927  微信小程序系统开发 微信新功能开发 小程序开发 小程序怎么开发 app小程序开发 简化小程序开发 微信小程序定制 小程序制作 开发微信小程序  ...

  6. 微信小程序-框架详解(1)

    配置 -app.json文件对微信小程序进行全局配置,决定页面文件的路径.窗口表现.设置网络超时时间.tab等 { "pages": [ //决定页面文件的路径 "pag ...

  7. 微信小程序配置详解

    在之前已经通过微信公众平台的官方网站https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/devtools.html,注册好小程序并且登录成功后(这里主 ...

  8. 微信小程序-video详解

    在小程序火热的今天,作为IT行业的一员,我也来凑了一下热闹,话不多说了,接下来看看视频上传,和跨页面获取值的相关案例吧!! 视频上传部分代码: 视频播放 随机颜色的产生: 颜色页面的选择:

  9. 【微信小程序】详解wx:if elif else的用法(搭配view、block)

    1.搭配view <view wx:if="{{boolean==true}}"> <view class="bg_black">< ...

随机推荐

  1. hiho#1457 重复旋律7 求子串和 后缀自动机

    题目传送门 题意: 给出若干个串,求所有子串的和,子串和的定义为十进制数,取模1e9+7. 思路: 对于一个串来说,一个状态p就代表着$right$相同的集合,假设我们已经知道了状态p的$sum$,以 ...

  2. 常见的错误:FTP连接时出现“227 Entering Passive Mode”

    FTP的主动模式(PORT Mode)及被动模式(Passive Mode) FTP的特殊性: 大多数的TCP服务是使用单个的连接,一般是客户向服务器的一个周知端口发起连接,然后使用这个连接进行通讯. ...

  3. windows 3389 远程

    3389常用命令: 1.查询终端端口 REG query HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server\WinSt ...

  4. box-shadow向元素添加阴影效果

    div{ box-shadow: 10px 10px 5px #888888;} 语法:box-shadow: h-shadow v-shadow blur spread color inset; 值 ...

  5. Windows和Ubuntu双系统时间相差8个小时的问题

    由于要学编程,在windows 10上安装了Ubuntu16.04双系统.但是却造成windows时间老是比实际时间慢八个小时,Ubuntu会与网络同步时间,但是在程序中调用主板时间时仍然是UTC时间 ...

  6. MYSQL的NOW和SYSDATE函数的区别

    在MySQL Performance Blog博客上看到一篇文章介绍now()和sysdate()函数. 想起很多朋友专门问在MySQL里面提供now()和sysdate()函数,都是表示取得当前时间 ...

  7. Memcached分布式算法详解--转

    http://xiexiejiao.cn/java/memcached-consistent-hashing.html Memcached分布式算法在网上一搜可以找到一大片了,不过对于Memcache ...

  8. IOS仿微信朋友圈好友展示

    前几天小伙伴要帮他做一个群聊功能,里面有好友列表,要求和微信的差不多(见下图),让小伙伴自己实现了下,他将CollectionView放在tableView的tableHead中,可是当添加好友或删除 ...

  9. 【TCP协议详解】

    为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样 ...

  10. 第9章 scrapy-redis分布式爬虫

    9-1 分布式爬虫要点 1.分布式的优点 充分利用多机器的宽带加速爬取 充分利用多机的IP加速爬取速度 问:为什么scrapy不支持分布式? 答:在scrapy中scheduler是运行在队列的,而队 ...