最近利用业余时间倒腾了一个微信小程序,主要目的是横向比较一些业界小程序平台的架构和做法。因为有在其他平台长期的开发经验,对于小程序的一些机制做了一些辩证的思考。例如,小程序的页面,其实不是一个页面,而只是一个方法构造器,甚至整个应用也都只是一个方法而已。这样的情况下,我们以前学到的很多面向对象的经验,例如继承之类的,在这里通通就没有用武之地了。不可否认这样对于一些新手来说,可能是一个不错的设计。但对于我们这种老炮来说,总是有一种要去改造它的冲动。

于是,我也就开始思考,看看能否对所有的页面做一个通用的功能,而不是每次在每个页面中都去写一遍。例如,很显然几乎所有的小程序,都会有用户个性化的数据。这个数据其实需要到所有的页面,那么到底怎么加载这个数据呢?我们可以在App.OnLaunch中尝试去加载,但一般加载数据的过程都是异步的,又怎么通知到所有页面说数据加载成功了呢?

带着这样的问题,本着能用前人经验就不自己折腾的原则,我在网上搜了一下。下面这一篇文章真是跟我英雄所见略同啊。

https://developers.weixin.qq.com/community/develop/article/doc/000a42cdb744b0c00b99eaaba56813

利用上述文章提到的思路,基本上能实现我的目的。本文是写了一个Typescript的版本,但荣誉属于上面的这位Stephen同学。

我喜欢Typescript, 这不用多说了,至于如何用Typescript 进行微信小程序开发,请参考我的文章 https://www.cnblogs.com/chenxizhang/p/14265729.html

下面上代码,并交待一些用Typescript时特殊的地方。

  1. 默认情况下,Typescript版本中Page 构造器是不允许修改的,因为它定义时用的是const,你需要手工修改下面这个文件,将其修改为let

  2. 创建一个pagex.ts 文件,当然你可以起任何你想要的名字

    const pagex = (Page: WechatMiniprogram.Page.Constructor): WechatMiniprogram.Page.Constructor => {

    return (object: any) => {

    const { onLoaded } = object

    //由于我们需要重写onLoad这个默认方法,为了让具体页面还可以定义具体的Load逻辑,我们假定页面需要实现一个onLoaded方法

    object.onLoad = function (_options: any) {

    //读取用户数据

    wx.getUserInfo({

    success: res => {

    if (typeof onLoaded === "function")

    //如果用户定义了这个函数的话,就调用它

    onLoaded.call(this, res.userInfo)

    }

    })

    }

    //重写所有页面的分享逻辑,这样不需要在页面中定义了

    object.onShareAppMessage = () => {

    return {

    title: "转发标题"

    }

    }

    return Page(object)

    }

    }

    const original = Page

    Page = pagex(original)

  3. 将这个扩展代码导入到应用中。这个很简单,只需要在App.ts中导入即可。

  4. 定义一个页面生命周期的扩展接口,以便提示页面,可以实现onLoaded这个函数

  5. 在具体页面代码中,用如下的方式实现一个自定义的页面构造器

很多事情都是因为你想去做它,然后你就做到了。不要停止思考和尝试。

对微信小程序的生命周期进行扩展 – Typescript 篇的更多相关文章

  1. 微信小程序之生命周期(三)

    [未经作者本人同意,请勿以任何形式转载] 上一篇介绍微信小程序开发工具使用和项目目录结构. 这一章节介绍微信小程序的生命周期,什么是生命周期呢? 通俗的讲,生命周期就是指一个对象的生老病死. 从软件的 ...

  2. 教你理解微信小程序的生命周期和运行原理

    转自:http://blog.csdn.net/tsr106/article/details/53052879  写微信小程序,他的生命周期不能不知道,不知道小程序就会出现各种bug而无法解决.小助君 ...

  3. [转] 微信小程序之生命周期

    本篇文章介绍小程序的生命周期,由于小程序分为应用和页面两个部分,所以小程序的生命周期就涉及到三个部分,分别是: 应用的生命周期 页面的生命周期 应用的生命周期对页面生命周期的影响 一.应用的生命周期 ...

  4. 理解微信小程序的生命周期和运行原理

    写微信小程序,他的生命周期不能不知道,不知道小程序就会出现各种bug而无法解决.小助君公众号带你学习小程序的生命周期和运行原理. 小程序由两大线程组成:负责界面的线程(view thread)和服务线 ...

  5. 微信小程序-APP生命周期与运行机制

    QQ讨论群:785071190 开发微信小程序之前需要先了解微信小程序运行机制以及其生命周期,小程序APP生命周期需要先从app.js这个文件开始. 阅读过"微信小程序-代码构成" ...

  6. 微信小程序APP生命周期

    小程序APP生命周期需要先从app.js这个文件开始,App() 必须在 app.js 中调用,必须调用且只能调用一次,app.js中定义了一些应用的生命周期函数 onLaunch----当小程序初始 ...

  7. 微信小程序的生命周期和APP对象的使用

    1.生命周期和APP对象的使用: //app.js App({ onLaunch: function () { //调用API从本地缓存中获取数据 var logs = wx.getStorageSy ...

  8. 微信小程序-Page生命周期

    QQ讨论群:785071190 微信小程序开发之前我们还需认识一下小程序页面的生命周期,丛"微信小程序-代码构成"一文中我们可以了解到小程序页面中有一个.js的文件,这篇博文我们来 ...

  9. 原生微信小程序的生命周期

    小程序的生命周期函数:onLaunch:function(){当启动小程序时触发小程序只会启动1次,一般为初次打开时一般只会触发一次},onShow:function(){当小程序从后台切入到前台时触 ...

随机推荐

  1. Panda Global获悉,美国承诺4年内明确区块链数字资产监管方式!

    近日,美国商品期货交易委员会(CFTC)宣布,在4年内将会全面把加密货币监管列为优先事项.Panda Global从7月8日公布的新战略中获悉,此次CFTC公布了自己接下来的新框架,并且在框架中承诺: ...

  2. 01_02_py

    1基础知识 1.自然语言 (natural language) 是人们交流所使用的语言,例如英语.西班牙语和法语.它们不是人为设计出来的(尽管有人试图这样做):而是自然演变而来. 2.形式语言 (fo ...

  3. 海量数据架构下如何保证Mycat的高可用?

    写在前面 在<冰河,能讲讲Mycat如何实现MySQL的读写分离吗?>一文中,我们实现了使用Mycat实现MySQL的读写分离.然而,此时的Mycat只有一个节点,如果Mycat节点宕机了 ...

  4. 《深入理解计算机系统》实验三 —— Buf Lab

    这是CSAPP的第三个实验,主要让我们熟悉GDB的使用,理解程序栈帧的结构和缓冲区溢出的原理. 实验目的   本实验的目的在于加深对IA-32函数调用规则和栈结构的具体理解.实验的主要内容是对一个可执 ...

  5. IOS中将字典转成模型对象

    作为IOS开发初级者今天学习了 如何将plist数据字典转成 数据对象数组中 .有点像C#中解析xml数据 的过程. apps.plist的xml数据是这样的 <?xml version=&qu ...

  6. Elastic Search 学习之路(二)——inverted index(反向索引)

    这是篇翻译文,图画的挺有意思. Elastic使用非常特殊的数据结构,称作反向索引.反向索引中,包括了一组document中出现的唯一的单词,和对应的单词,所出现的位置.反向索引是在ES中,docum ...

  7. Go语言(1)——程序结构

    程序结构 基础部分仅仅列举和其他语言不一样的地方(C语言为例). 声明 Go语言有四个主要声明:var.const.type.func,类似于C语言中的变量,常量,结构体和函数. package ma ...

  8. SPI机制剖析——基于DriverManager+ServiceLoader的源码分析

    我的上一篇博客类加载器与双亲委派中提到,SPI机制是一种上级类加载器调用下级类加载器的情形,因此会打破类加载的双亲委派模型.为了深入理解其中的细节,本博客详细剖析一下SPI机制,并以JDBC为例,基于 ...

  9. metinfo小于v6.2.0版本通杀SQL盲注漏洞分析

    0x01 此漏洞是由于未将decode解码后的数据过滤,而直接带入SQL语句中,从而导致SQL盲注漏洞. 0x02 漏洞分析:此处复现为metinfo6.1.3版本,漏洞最初产生为:/app/syst ...

  10. 群晖DS218+部署GitLab

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...