专注连锁门店会员营销管理系统
线上+线下+进销存+收银+会员2018-07-25 作者:秩名
扩展 Page页面对象 是小程序开发中很实用的技巧,需要如何开发呢?
小程序是通过调用 Page 函数来注册一个页面的:
//index.js Page({ data: { text: "This is page data." }, onLoad: function(options) { // Do some initialize when page load. }, // Event handler. viewTap: function() { this.setData({ text: 'Set some data for updating view.' }, function() { // this is setData callback }) } }) 复制代码
这里 Page 的作用相当于构造函数, Page 会初始化页面对象(实例),然后将配置参数中的属性 merge 到页面对象上。
假设你封装了个 http 模块负责发出请求,你想在页面对象中直接通过 this.http 引用这个模块,就需要扩展页面对象。要扩展一个对象,在 JavaScript 中的常见做法是扩展构造函数的 prototype 属性,这是 Vue 很多插件的实现:
import axios from 'axios' Vue.prototype.axios = axios // 在 vue 组件中 this.axios.get(api).then(callback) 复制代码
很不幸,在小程序中这个办法无效。 Page 并不是普通的构造函数,底层还做了很多其他事情,没办法直接通过 Page.prototype 扩展页面对象。
我们可以转变思路,扩展传进 Page 的配置对象。既然始终要通过调用 Page 注册页面,可以定义一个函数,这个函数会将收到的配置对象参数进行处理,然后再传给 Page 。
// wxPage.js import http from '../utils/http' const wxPage = function(config) { config.http = http return Page(config) } export default wxPage 复制代码
注册页面的时候改用这个 wxPage :
import Page from './wxPage' Page({ data: { text: "This is page data." }, onLoad: function(options) { console.log(this.http) // 打印 http 模块变量 this.http.get(api).then(callback) // 直接调用 http 的方法 }, }) 复制代码
为了增强页面对象,每个需要的页面都得引入 wxPage 是一件不太省心的事;更多时候我们是在维护一个老项目,需要扩展每个原有的页面对象,这时可以直接修改 Page :
const originalPage = Page //保存原来的Page Page = function(config) { // 覆盖Page变量 config.http = http return originalPage(config) } 复制代码
一般来说,修改 Page 的时机是在 App onLoad 的时候。这样原有的页面不用修改,直接就能通过 this.http 拿到 http 。
有时我们希望在页面注册的 onLoad 阶段执行一些通用的逻辑,例如埋点,打 log 等,这时可以改写配置对象中的 onLoad 方法:
const originalPage = Page Page = function(config) { const { onLoad } = config config.onLoad = function(onLoadOptions) { // 打 log、埋点…… console.log('每个页面都会打出这个log') if (typeof onLoad === 'function') { onLoad.call(this, onLoadOptions) } } return originalPage(config) } 复制代码
小程序中的页面跳转会形成一个页面栈,栈中存放着每个页面对象,可以通过getCurrentPages 方法获得这个页面栈。可以在页面 onLoad 的时候获取这个页面栈,然后取出倒数第二个对象,就是当前页上一页的页面对象:
// 接上... const { onLoad } = config config.onLoad = function(onLoadOptions) { const pages = getCurrentPages() this.__previousPage = pages[pages.length - 2] // 将上一页的页面对象赋为this.__previousPage if (typeof onLoad === 'function') { onLoad.call(this, onLoadOptions) } } return originalPage(config) 复制代码
这样在页面对象中可通过引用 this.__previousPage 获取上一页页面对象的data及所有方法,这样在一些只需要两个页面互动的情景下,当前页直接调用上一个页面对象的方法(相当于回调)后再返回,比通过全局状态管理上一页的数据要方便。
这个不多说了,直接看代码吧:
// 接上 config.navigateTo = function(url, params) { // 实现一个navigateTo方法,参数包括跳转url和要传递的参数 this.__params = params wx.navigateTo({ url }) } config.onLoad = function(onLoadOptions) { const pages = getCurrentPages() this.__previousPage = pages[pages.length - 2] // 将上一页的页面对象赋为this.__previousPage if (this.__previousPage) { onLoadOptions.params = this.__previousPage.__params // 获取上一页面的__params赋给onLoad函数的options delete this.__previousPage.__params } if (typeof onLoad === 'function') { onLoad.call(this, onLoadOptions) } } // A 页面跳转 B 页面 this.navigateTo('urlToB', { foo: 'bar' }) // B 页面的 onLoad Page({ onLoad(options) { console.log(options.params) // { foo: 'bar' } } }) 复制代码
就写到这里吧,在使用原生方案开发的时候,这些技巧还是挺实用的。以后再写写怎样构建小程序,使小程序支持文件预编译、require npm 包等。
HiShop小程序工具提供多类型商城/门店小程序制作,可视化编辑 1秒生成5步上线。通过拖拽、拼接模块布局小程序商城页面,所看即所得,只需要美工就能做出精美商城。更多小程序商店请查看:小程序商店
线上+线下+进销存+收银+会员门店零售管理好帮手
门店能实现快速收银,提升门店经营效率。
系统自带进销存管理,更好管理库存销售。
配备收银硬件一站式整体服务。
收 银 会员管理 库存管理 商品管理 交接班 数据报表 营销促单 售后处理 多种收款
获取报价1、本网站发布的该篇文章,目的在于分享电商知识及传递、交流相关电商信息,以便您学习或了解电商知识,请您不要用于其他用途;
2、该篇文章中所涉及的商标、标识的商品/服务并非来源于本网站,更非本网站提供,与本网站无关,系他人的商品或服务,本网站对于该类商标、标识不拥有任何权利;
3、本网站不对该篇文章中所涉及的商标、标识的商品/服务作任何明示或暗示的保证或担保;
4、本网站不对文章中所涉及的内容真实性、准确性、可靠性负责,仅系客观性描述,如您需要了解该类商品/服务详细的资讯,请您直接与该类商品/服务的提供者联系。
推荐文章
最新消息总结,开发一个小程序我们可以选择的第三方框架有5种,大家比较熟悉的有美团小程序框架mpvue,还有组件化框架等...
最近在调研小程序的分享能力,本篇文档主要是调研小程序关于分享方面的玩法,目的是学习小程序在项目应用以及玩法链上...
许多人在使用小程序,会有一个很麻烦的事情,就是使用过小程序之后,会不断的发送自己的定位消息,那么这个小程序的...
一款小程序,很多时候需要调用内置的照相机,实现拍照并图片上传,那么要如何实现呢?...
会员积分兑换系统百科 会员积分兑换系统作为一种普遍且有效的商业运营手段,在众多行业中发挥着关键作用。它借助积分...
会员互动营销兑换系统百科 1. 会员互动营销兑换系统有哪些 在当下竞争激烈的商业环境中,各类会员互动营销兑换系统层出...
会员积分管理 会员积分管理是企业为提升客户忠诚度、增强客户粘性而广泛采用的一种营销手段,通过赋予客户消费或参与...
积分商城建设百科 积分商城作为一种有效的用户运营和营销工具,在众多企业和平台中得到广泛应用。它不仅能够增强用户...
会员管理系统百科 1. 会员管理系统软件哪个好 在选择会员管理系统软件时,需综合多方面因素考量,不同行业、规模的企业...
积分商城搭建百科 积分商城作为一种有效的用户运营和营销工具,在众多企业和平台中得到广泛应用。它不仅能够增强用户...