我的编程空间,编程开发者的网络收藏夹
学习永远不晚

小程序开发中如何扩展Page页面对象

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

小程序开发中如何扩展Page页面对象

这篇文章主要介绍“小程序开发中如何扩展Page页面对象 ”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“小程序开发中如何扩展Page页面对象 ”文章能帮助大家解决问题。

小程序是通过调用 Page 函数来注册一个页面的:

//index.jsPage({  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.jsimport 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 的方法  },})复制代码

直接修改 Page 函数

为了增强页面对象,每个需要的页面都得引入 wxPage 是一件不太省心的事;更多时候我们是在维护一个老项目,需要扩展每个原有的页面对象,这时可以直接修改 Page :

const originalPage = Page //保存原来的PagePage = function(config) { // 覆盖Page变量  config.http = http  return originalPage(config)}复制代码

一般来说,修改 Page 的时机是在 App onLoad 的时候。这样原有的页面不用修改,直接就能通过 this.http 拿到 http 。

通过扩展 Page 页面对象实现常见需求

1. 给生命周期方法增加通用逻辑

有时我们希望在页面注册的 onLoad 阶段执行一些通用的逻辑,例如埋点,打 log 等,这时可以改写配置对象中的 onLoad 方法:

const originalPage = PagePage = function(config) {  const { onLoad } = config  config.onLoad = function(onLoadOptions) {    // 打 log、埋点……    console.log('每个页面都会打出这个log')    if (typeof onLoad === 'function') {      onLoad.call(this, onLoadOptions)    }  }  return originalPage(config)}复制代码

2. 获取上一页页面对象

小程序中的页面跳转会形成一个页面栈,栈中存放着每个页面对象,可以通过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及所有方法,这样在一些只需要两个页面互动的情景下,当前页直接调用上一个页面对象的方法(相当于回调)后再返回,比通过全局状态管理上一页的数据要方便。

3. 跳转页面并传递数据到下一页

这个不多说了,直接看代码吧:

// 接上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 页面的 onLoadPage({  onLoad(options) {    console.log(options.params) // { foo: 'bar' }  }})复制代码

关于“小程序开发中如何扩展Page页面对象 ”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

小程序开发中如何扩展Page页面对象

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

小程序开发中如何扩展Page页面对象

这篇文章主要介绍“小程序开发中如何扩展Page页面对象 ”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“小程序开发中如何扩展Page页面对象 ”文章能帮助大家解决问题。小程序是通过调用 Page 函数
2023-06-26

小程序开发 page-container 页面容器弹出对话框功能的实现

这篇文章主要介绍了小程序开发 page-container 页面容器,弹出对话框,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2022-11-13

PHP扩展开发:如何设计自定义函数以支持面向对象编程?

php 扩展可以支持面向对象编程,通过设计自定义函数来创建对象、访问属性和调用方法。首先创建自定义函数实例化对象,然后定义获取属性和调用方法的函数。实战中,我们可以自定义函数来创建一个 myclass 对象,获取其 my_property
PHP扩展开发:如何设计自定义函数以支持面向对象编程?
2024-05-16

小程序开发中如何动态设置当前页面的标题

这篇“小程序开发中如何动态设置当前页面的标题”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“小程序开发中如何动态设置当前页面的标题”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望大家通过这篇文章
2023-06-26

微信小程序开发中如何仿写饿了么个人中心页面

这篇文章主要介绍微信小程序开发中如何仿写饿了么个人中心页面,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!附带2个技能:经典列表页样式grid网络WXML文件:[mw_shl_code=html,true]
2023-06-26

小程序开发中如何实现停止当前页面下拉刷新

这篇“小程序开发中如何实现停止当前页面下拉刷新”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“小程序开发中如何实现停止当前页面下拉刷新”,小编整理了以下知识点,请大家跟着小编的步伐一步一步的慢慢
2023-06-26

微信小程序开发中如何动态设置当前页面的标题

这篇“微信小程序开发中如何动态设置当前页面的标题”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“微信小程序开发中如何动态设置当前页面的标题”,小编整理了以下知识点,请大家跟着小编的步伐一步一步的
2023-06-26

小程序开发中如何调起客户端扫码界面

这篇文章主要为大家展示了小程序开发中如何调起客户端扫码界面,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“小程序开发中如何调起客户端扫码界面”这篇文章吧。调起客户端扫码界面,扫码成功后返回对应的结果
2023-06-26

PHP7中的面向对象编程:如何提高代码的可维护性和可扩展性?

PHP7中的面向对象编程:如何提高代码的可维护性和可扩展性?摘要:随着PHP7的引入,面向对象编程(OOP)在PHP开发中变得更加重要。本文将介绍如何利用PHP7的新特性来提高代码的可维护性和可扩展性,并提供一些具体的代码示例来说明这些概念
2023-10-22

微信小程序开发中如何使用wx.createAudioContext创建并返回audio上下文audioContext对象

这篇文章主要为大家展示了微信小程序开发中如何使用wx.createAudioContext创建并返回audio上下文audioContext对象,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“微信小
2023-06-26

小程序开发中如何覆盖掉原来该 key 对应的内容

本文将为大家详细介绍“小程序开发中如何覆盖掉原来该 key 对应的内容”,内容步骤清晰详细,细节处理妥当,而小编每天都会更新不同的知识点,希望这篇“小程序开发中如何覆盖掉原来该 key 对应的内容”能够给你意想不到的收获,请大家跟着小编的思
2023-06-26

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录