专注连锁门店会员营销管理系统
线上+线下+进销存+收银+会员2018-06-27 作者:秩名
在小程序开发中, App(...) 和 Page(...) 是我们最熟悉也是最常用的两个函数,今天我们就来分析一下它们的内部实现,以及调用时的初始化流程。
在微信开发者工具中,编译运行你的小程序项目,然后打开控制台,输入 document 并回车,就可以看到小程序运行时,WebView 加载的完整的 page-frame.html ,如下图:
通过分析这个 HTML 文件,我们可以得到小程序的启动执行流程大致如下:
此图来自上述文章,我们这里不再重复赘述这些流程,下面我们来看一下其中的 App() 和 Page() 的细节。这两个函数在小程序框架 WAService.js 中定义,并在 app.js 和每个页面的 page.js 中进行调用实例化。
在微信开发者工具的控制台中执行 openVendor() 方法,可以打开小程序框架所在目录,如下:
/Users/用户名/Library/Application Support/微信web开发者工具/WeappVendor/基础库版本号目录
本文以 1.9.94 基础库为例进行分析。 WAService.js 文件的结构如下:
;(function(global) { // WeixinJSBridge 的定义和加载 // NativeBuffer 的定义和加载 // wxConsole 的定义和加载 // WeixinWorker 的定义和加载 // Reporter 的定义和加载 // __appServiceSDK__ 的定义和加载 wx = __appServiceSDK__.wx, // exparser 的定义和加载 // __virtualDOM__ 的定义和加载 // __appServiceEngine__ 的定义和加载 Page = __appServiceEngine__.Page, Component = __appServiceEngine__.Component, Behavior = __appServiceEngine__.Behavior, __webview_engine_version__ = .02, App = __appServiceEngine__.App, getApp = __appServiceEngine__.getApp, getCurrentPages = __appServiceEngine__.getCurrentPages, __createPluginGlobal = __appServiceEngine__.__createPluginGlobal, // __wxModule__ 的定义和加载 definePlugin = __wxModule__.definePlugin, requirePlugin = __wxModule__.requirePlugin; // define 方法的定义 // require 方法的定义 global.App = App; global.Page = Page; global.Component = Component; global.Behavior = Behavior; global.__webview_engine_version__ = 0.02; global.getApp = getApp; global.getCurrentPages = getCurrentPages; global.wx = wx; global.definePlugin = __wxModule__.definePlugin; global.requirePlugin = __wxModule__.requirePlugin; })(this);
我们发现, WAService.js 中定义了 WeixinJSBridge 和 wx 这两个基础 API 集合,同时也包含的其他一些框架核心,如 exparser , __virtualDOM__ , __appServiceEngine__ 等。其中 __appServiceEngine__ 提供了框架最基本的对外接口,如 App,Page,Component,Behavior 等方法; exparser 提供了框架底层的能力,如实例化组件,数据变化监听,View 层与逻辑层的交互等; __virtualDOM__ 则起着连接 __appServiceEngine__ 和 exparser 的作用,如对开发者传入 Page 方法的对象进行格式化再传入 exparser 的对应方法处理。(此段分析摘自上述文章)
由上可知,本文要分析的全局函数 App() 和 Page() 是对 WAService.js 中定义的 __appServiceEngine__ 对象同名方法的引用。下面我们简要分析一下它们的内部实现和初始化流程。
根据微信小程序 开发文档 , App() 函数用来注册一个小程序,接收一个 object 对象参数,其指定小程序的生命周期函数等。我们从微信开发者工具的函数提示可以知道, App() 函数的声明如下:
function App(options: _AppOptions): void
对于入参 object 对象(_AppOptions)的属性说明如下:
此外,全局的 getApp() 函数可以用来获取到小程序实例,它的声明如下:
function getApp(): object
线上+线下+进销存+收银+会员门店零售管理好帮手
门店能实现快速收银,提升门店经营效率。
系统自带进销存管理,更好管理库存销售。
配备收银硬件一站式整体服务。
收 银 会员管理 库存管理 商品管理 交接班 数据报表 营销促单 售后处理 多种收款
获取报价推荐文章
最新消息总结,开发一个小程序我们可以选择的第三方框架有5种,大家比较熟悉的有美团小程序框架mpvue,还有组件化框架等...
最近在调研小程序的分享能力,本篇文档主要是调研小程序关于分享方面的玩法,目的是学习小程序在项目应用以及玩法链上...
许多人在使用小程序,会有一个很麻烦的事情,就是使用过小程序之后,会不断的发送自己的定位消息,那么这个小程序的...
一款小程序,很多时候需要调用内置的照相机,实现拍照并图片上传,那么要如何实现呢?...
2024年怎样开加盟连锁店第七步(建立品牌知名度) 建立品牌知名度是成功创建一个加盟连锁品牌的关键步骤。一个强大的品...
2024年怎样开加盟连锁店第三步(开发一个详细的加盟手册) 加盟手册的重要性 加盟手册是加盟连锁品牌成功的基础组成部分...
在零售行业,线上线下一体化营销已经成为企业提升竞争力的关键策略。根据9的分析,2024年中国零售行业的数字化转型正在...
在数字化转型的浪潮中,线上线下推广方案已成为零售企业连接顾客、提升销售的关键策略。友数连锁,作为HiShop推出的新零...
星巴克的线上线下营销策略 星巴克作为全球知名的咖啡连锁品牌,一直在线上线下营销领域走在前列。以下是星巴克如何通...
在数字化时代,线上线下相结合的营销模式已成为零售行业的新常态,它通过整合线上电商平台和线下实体店铺的资源,为消...