微信小程序 - 页面继承(非完美解决方案)

这篇具有很好参考价值的文章主要介绍了微信小程序 - 页面继承(非完美解决方案)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

废话

小程序中提供了组件可以用于拆分逻辑,实现代码重用。
但有时我就想纯粹的从页面的角度来实现,毕竟组件和页面还是有点差异的。

思路

  1. 将共用的代码放在一个 page-base 中。
  2. 在两个子页面 page-a, page-b中分别引用它。
  3. 想查看 page-base 要在编译后先点 page-base
    如果先点了 page-apage-b 再点 page-basepage-base 页的 Page() 没执行,所以页面没东西。(这就是不完美的地方)

微信小程序 - 页面继承(非完美解决方案),WeChat微信,微信小程序,小程序,继承,父页面

首页 index

为了便于调试,我们需要一个首页来访问 page-basepage-apage-b

index.js

没有业务逻辑,只是跳转。

Page({})

index.json

所有页面都没使用组件,所以全是这样。后面几个页面的就不贴了。

{
  "usingComponents": {}
}

index.wxml

首页共三个按钮,分别跳转三个页面。

<scroll-view class="scrollarea" scroll-y type="list">
  <view class="container">
    <navigator url="/pages/page-base/page-base" open-type="navigate">  
      <button class="btn">页面base</button>
    </navigator>
    <navigator url="/pages/page-a/page-a" open-type="navigate">  
      <button class="btn">页面A</button>
    </navigator>
    <navigator url="/pages/page-b/page-b" open-type="navigate">  
      <button class="btn">页面B</button>
    </navigator>
  </view>
</scroll-view>

父页面 page-base

page-base.js

  1. 在这个 js 中,我们将 Page 的参数对象 basePage 提出来。
  2. 判断当前页是 page-base 时才执行 Page() 方法。
  3. 最后导出 basePage 给子页面用。
// pages/page-base/page-base.js
let basePage = {
  data: {
    title: 'basePage',
    question: `西北玄天一朵云`,
    test: `我在 page-base`
  },
  onLoad(options) {
    wx.setNavigationBarTitle({ title: this.data.title, });
  },
  question(e){
    wx.showToast({ title: `${this.data.question}`, duration: 300 });
  },
  answer(e){
    wx.showToast({ title: `乌鸦落在凤凰群`, duration: 300 });
  },
  test(e){
    wx.showToast({ title: `${this.data.test}`, duration: 300 });
  }
}
// 避免子页面执行此 Page 报错
if(decodePathName == "pages/page-base/page-base"){
  Page(basePage);
}

module.exports = {
  basePage
}

page-base.wxml

这里我们给了三个按钮,并绑定了 top 事件。点击后会弹出 Toast

<!--pages/page-base/page-base.wxml-->
<view class="container">
  <button class="btn" bind:tap="question"></button>
  <button class="btn" bind:tap="answer"></button>
  <button class="btn" bind:tap="test">test</button>
</view>

子页面 page-a

page-a.js

  1. require 导入父页面的 js模块 ,拿到 basePage
  2. 利用es6 的新特性展开 basePage 与子页的内容组成新的对象。(实现继承父页面js的效果)
    2.1. 我们在子页面重写了 data 对象和 answer 方法。
    2.2. 注意:data对象的内容也要单独处理,不然它直接覆盖父页面的 data 了,我们就丢失父页的数据了。
// pages/page-a/page-a.js
const { basePage } = require('../page-base/page-base.js');

Page({
  ...basePage,
  data: {
    ...basePage.data,
    title: 'pageA',
    question: '满桌都是英雄汉',
  },
  answer(e){
    wx.showToast({ title: `哪是君来哪是臣`, duration: 300 });
  }
})

page-a.wxml

直接引用父页

<!--pages/page-a/page-a.wxml-->
<include src="/pages/page-base/page-base"/>

子页面 page-b

page-b.js

// pages/page-b/page-b.js
const { basePage } = require('../page-base/page-base.js');

Page({
  ...basePage,
  data: {
    ...basePage.data,
    title: 'pageB',
    question: '西北玄天一枝花',
  },
  answer(e){ wx.showToast({ title: `天下绿林是一家`, duration: 300 }); }
})

page-b.wxml

<!--pages/page-b/page-b.wxml-->
<include src="/pages/page-base/page-base"/>

其它

app.js

App({})

app.json

{
  "pages": [
    "pages/index/index",
    "pages/page-a/page-a",
    "pages/page-b/page-b",
    "pages/page-base/page-base"
  ],
  "window": {
    "backgroundTextStyle": "light",
    "navigationBarBackgroundColor": "#fff",
    "navigationBarTitleText": "面页共享代码Demo",
    "navigationBarTextStyle": "black"
  },
  "style": "v2",
  "componentFramework": "glass-easel",
  "sitemapLocation": "sitemap.json",
  "lazyCodeLoading": "requiredComponents"
}

app.wxss

所有样式都放在 app.wxss 里了。

/**app.wxss**/
page {
  height: 100vh;
  width: 100vw;
  display: flex;
  flex-direction: column;
}

.container {
  height: 100%;
  display: flex;
  flex-direction: column;
  justify-content: flex-start;
  align-items: center;
  padding: 200rpx 0;
  box-sizing: border-box;
} 

.btn {
  margin: 60rpx 0;
  border: 2px #888 solid;
}

参考资料

Page(Object object) 注册小程序中的一个页面。接受一个 Object 类型参数,其指定页面的初始数据、生命周期回调、事件处理函数等。文章来源地址https://www.toymoban.com/news/detail-717138.html

到了这里,关于微信小程序 - 页面继承(非完美解决方案)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序获取用户头像和昵称完美解决方法(最新方法)

    自 2022 年 10 月 25 日 24 时后,用户头像昵称获取规则将进行如下调整 从基础库 2.21.2 开始支持 当小程序需要让用户完善个人资料时,可以通过微信提供的头像昵称填写能力快速完善。 根据相关法律法规,为确保信息安全,由用户上传的图片、昵称等信息微信侧将进行安全检

    2024年02月08日
    浏览(48)
  • 完美解决微信小程序评分人数不足的问题,亲测有效

    先上图(我自己的小程序) 之前也被这个问题困扰过,也百度过,都说是官方随机让用户评分的。 但是,我大意了啊,没有闪。 最近用朋友微信搜自己的小程序,偶然发现一个方法,大概率能出现评分界面。 评分仅统计100天内的评分,所以100天前的评分不会被统计。 评分

    2024年02月06日
    浏览(150)
  • 新版本小程序打不开丨完美解决 微信小程序打不开解决方法

    微信打不开小程序如何解决 微信打不开小程序解决方法 问题如下视频: 新版微信小程序无法打开视频? 原因分析: 旧版微信为xweb, 小程序可以正常使用 新版微信为wmpf, 影响到了小程序的使用 意见反馈 (3.7.0以上微信在搜索栏输入:showcmdwnd ,包括前面冒号) 中输入以下代码

    2024年02月14日
    浏览(119)
  • 完美解决微信小程序使用复选框van-checkbox无法选中

    由于小程序使用了vant-ui框架,导致checkbox点击无法选中问题   记得定义 checked 默认值   解决办法 : 添加onChange事件,给 checked 做赋值操作。 可以打印看看console.log(e) 选中效果: 取消选中效果:    

    2024年02月12日
    浏览(78)
  • 微信小程序:小程序常见问题及解决方案

    在小程序中使用原生的表单组件时,在有弹出框出现的情况下,原生表单组件会出现在遮罩层上面,且会造成事件穿透的情况。 解决方案一: 使用cover-view,cover-view比原生组件的层级更高,或者说也是一种原生组件,不过在cover-view的子组件只能是coveri-view、cover-image,对于包

    2024年02月10日
    浏览(70)
  • 微信小程序 | 人脸识别的最终解决方案

    📌 个人主页 :个人主页 ​🧀 推荐专栏 :小程序开发成神之路 --( 这是一个为想要 入门和进阶小程序开发专门开启的精品专栏 !从 个人到商业的全套开发教程 ,实打实的干货分享,确定不来看看? 😻😻) 📝 作者简介 :一个读研中创业、打工中学习的能搞全栈、也搞算

    2024年02月02日
    浏览(66)
  • 微信小程序 - HTTPS 证书链解决方案

    问题信息 errMsg: \\\"request:fail -2:net::ERR_FAILED\\\" errno: 600001 Ps1:这个错误是在微信小程序项目迁移的时候,调用 HTTPS API 时一不小心配置错了很容易产生的问题,DDDD~ Ps2:电脑端工具能访问 API 成功,估计是勾选了不效验合法域名的原因,而手机端就显示报错 分析原因 猜想1:一开始

    2024年02月11日
    浏览(68)
  • 微信小程序 - 实现点击按钮退出小程序的解决方案

    在微信小程序开发中,有时候我们需要在小程序中提供一个按钮,使用户能够方便地退出小程序。本篇文章将介绍一种简单的解决方案,通过点击按钮来实现退出小程序的功能。 首先,我们需要在小程序的页面中添加一个按钮,用户可以点击该按钮来退出小程序。在小程序的

    2024年01月22日
    浏览(47)
  • 微信小程序 canvas 层级过高 解决方案

    先看bug: baidu上 关于小程序canvas层级过高 的的解决方案,大致分为 两种 : 将canvas标签替换为图片: 使用cover-view(小程序层级最高的标签)去覆盖canvas标签: 关于cover-view的小程序官方文档 两种方案的不足: 方案1 需要等待canvas渲染完成后再生成图片去替换,且canvas标签不

    2024年02月09日
    浏览(37)
  • 微信小程序uni.chooseImage()无效解决方案

    微信小程序在上传图片时可以通过 uni.chooseImage()方案进行上传,这里不再赘述具体参数。一直项目都可以正常使用,突然有一天发现无法使用该方法,于是查了一下,发现是用户隐私协议问题。故记录一下解决方案。大师 登陆微信公众平台:微信公众平台 设置——基本设置

    2024年02月04日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包