首页 > 编程语言 >小程序架构

小程序架构

时间:2024-05-20 17:30:50浏览次数:18  
标签:index 架构 app Global 程序 js Data 页面

Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解`

小程序架构

日期:2019-5-17 阿珏 折腾代码 浏览:1708次 评论:4条

不知道大家们写小程序是怎么个写法的,前几个月在写微信小程序,自己整的一种架构,或者叫框架


微信原生的架构是这样子的

├── app.js
├── app.json
├── app.wxss
├── pages
│   │── index
│   │   ├── index.wxml
│   │   ├── index.js
│   │   ├── index.json
│   │   └── index.wxss
│   └── logs
│       ├── logs.wxml
│       └── logs.js
└── utils

为什么不用微信原生的写法呢?
小程序就类似手机APP,都会有一个tabBar栏对吧,微信官方的tabBar栏是在app.json中进行的全局配置。做一般的开发是没有任何问题的,但涉及到一个复杂的tabBar栏时 ,使用官方原生的就无法实现,也无法动态加载,比如某视频app中间的拍照录像功能
这意味着,我们不能使用官方给我们提供的tabBar栏,需要我们自个写
最开始我的做法还是跟保持原生的结构,只是自己写tabBar栏,所以页面代码都写在一个文件中,默认显示第一屏,其他的都隐藏起来,切换页面的时候在把相应的页面显示,其他的隐藏起来,并且动态渲染数据上去。但是有个问题是,你要是小项目到没啥大问题,但是如果是大项目代码量很庞大,都写在一个文件中,后期难以维护,所以这个方法最后被pass掉

再后来将切换页面的方式改为跳转(wx.switchTab等),把不同页面的代码放到了不同的文件,但是还有一个问题,切换也会闪,每次切换页面就是等于重新打开一个网页一样,tabBar都被重新渲染,所以会闪。pass

由此就有了现在的全新架构方式:
将/pages/index/下的文件全部定义为入口文件,js入口,css入口,视图入口,不同页面的文件还是放到不同的位置去,为了好管理,新建了一个template的文件夹,用于放不同页面间的代码,结构和官方的但页面结构是一样的
根目录下的app.js用于存放全局函数,其他页面调用只需getApp()即可
js的入口文件
const app = getApp();
var index_js = require("../../template/index/index.js");
var types_js = require("../../template/types/types.js");
var Global_Data = [];
Page({
    data: {
        active: 0,
        show: {
            index: true,
            types: false,
            course: false,
            user: false
        }
    },
onLoad(options) {
    this.setData({
        Global_Data: index_js.getData()
    })
},

// 底部nav切换
tabbar_onChange(event) {
    var key = '';
    this.data.show = {
        index: false,
        types: false,
        course: false,
        user: false
    };
    console.log(event)
    switch (event.detail) {
        case 0:
            key = 'index';
            Global_Data = index_js.getData();
            break;
        case 1:
            key = 'types';
            Global_Data = types_js.getData()
            break;
        case 2:
            key = 'course';
            Global_Data = index_js.getData();
            break;
        case 3:
            key = 'user';
            Global_Data = index_js.getData();
            break;
    }
    this.data.show[key] = true;
    console.log(Global_Data)
    this.setData({
        show: this.data.show,
        Global_Data: Global_Data
    })
},

});

wxml入口文件

<!-- 入口文件 -->
<import src="/template/nav" />

<block wx:if="{{show.index }}">
    <import src="/template/index/index" />
    <template is="index" data="{{Global_Data}}" />
</block>

<block wx:elif="{{show.types}}">
    <import src="/template/types/types" />
    <template is="types" data="{{Global_Data}}" />
</block>

<block wx:elif="{{show.course}}">
    <import src="/template/course/course" />
    <template is="course" data="{{Global_Data}}" />
</block>

<block wx:elif="{{show.user}}">
    <import src="/template/user/user" />
    <template is="user" data="{{Global_Data}}" />
</block>

<template is="nav" data="{{active}}" />

<view style='height:50px;'></view>

css入口
@import "/template/user/user.wxss";

.container {
height: 100vh;
background-color: #fff;
}

.tag,
.button {
margin-right: 5px;
}

.van-card__footer {
margin-top: 5px;
}

然后子页面的代码结构

js

const app = getApp();
var index_data = {
    banner: [
        '//img4.mukewang.com/szimg/5c4a74c009dea3b500000000.jpg', '//img2.mukewang.com/szimg/5c734d880939299918000600.jpg', '//img4.mukewang.com/szimg/5c63e89209f9f17d00000000.jpg'
    ],
    imageUrl: 'http://img1.sycdn.imooc.com/szimg/5c6bdb3e08e4674a06000338-360-202.jpg',
    tabs_active: 0
};
// app.alert('aa');
// 需要对外开放接口,否则无法调用到
module.exports = {//用于返回全局数据
    getData: function() {
        return index_data;
    },
    myfunction: function (){
        app.alert('aa');
    }

};

css和wxml照常写即可,如果wxml要复用的地方继续在当前目录下分出公共部分,通过 template 标签引入即可
这种方式既能达到快速切换页面不闪,文件划分又好管理。
这种方式是结合了前面两种的失败经验所得,将其合二为一所诞生的。
由于最后项目并没有全部写,我就被叫去开发其他项目了,细节方面可能有所纰漏,后续如有新的进展的话,在做更新一波

本博客所有文章 如无特别注明 均为原创。 作者: 阿珏 , 复制或转载请 以超链接形式 注明转自 阿珏博客
原文地址《 小程序架构

网友评论:

凡人多烦事 1年前 (2020-02-17)
微信小程序和QQ小程序,框架接口不一样吗?听说微信小程序稍微修改一下,QQ小程序就可以用

阿珏 1年前 (2020-02-20)
@凡人多烦事:我这里说的是架构,不是框架。好高深的样子

VPS234主机测评 2年前 (2019-09-11)
小程序开发这个和Vue很像的,感觉比较简单[#aru_1]

阿珏 2年前 (2019-05-17)
新进展?不存在的,我都等一个多月了才发布的

标签:index,架构,app,Global,程序,js,Data,页面
From: https://www.cnblogs.com/Ajue/p/18202467

相关文章

  • 程序设计思路-球连球组成的群
    编码设计有很多思路,都是在简化映射实际问题时遇到的问题。之前和别人交流,得到一句“把它放在同一个地方好维护”,相同的功能只出现在一个地方。就会出现代码的聚合设计,也就是一种通用的功能索引,或者说面向对象的思想。首先程序可以被观察成,计算、存储、缓存、链接,这......
  • 1024 程序员节日快乐
    Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解`1024程序员节日快乐日期:2018-10-24阿珏谈天说地浏览:1507次评论:1条1024程序员节程序改变世界10......
  • 轻量级新浪图床程序 幻想领域1.0发布
    Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解`轻量级新浪图床程序幻想领域1.0发布日期:2018-3-8阿珏折腾代码浏览:30962次评论:117条幻想领域哇塞,终于有一款属于自己的图床了.......
  • 那些逃离北上广的程序员们,后来都怎么样了?| 编码人声
       「编码人声」是由「RTE开发者社区」策划的一档播客节目,关注行业发展变革、开发者职涯发展、技术突破以及创业创新,由开发者来分享开发者眼中的工作与生活。 近年来,许多开发者朋友纷纷「逃离」了一线城市,选择来到成本更低、生活节奏更舒适的地方,成为独立开发者。那么,这......
  • 软件工程是不是教会不怎么会写程序的人开发软件?
    软件工程并不仅仅是为了教会不怎么会写程序的人开发软件,它实际上是一个更为广泛和深入的领域。首先,软件工程确实包含了编程这一核心技能,但它更多地是关注如何以系统化、规范化和可维护的方式来进行软件开发。它涵盖了从需求分析、设计、编码、测试到维护的整个开发过程,并强调团队......
  • 龙哥量化:期货日内波段策略,利用量化程序自动浮盈加仓,自动止盈止损,案例1
    产品版本:A0051218产品功能:本系统适用于国内期货合约的程序化交易,客户在博易大师、快期等交易软件手工下第一单,本系统自动加仓三单,自动平仓四单,每单的手数必须一致。使用程序化替代手工控制交易过程。通过对持仓信息、挂单信息,成交回报,委托回报等信息的监控,实现了对交易过程的精......
  • 1024 程序员节日快乐
    Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解`1024程序员节日快乐日期:2018-10-24阿珏谈天说地浏览:1507次评论:1条1024程序员节程序改变世界10......
  • 探讨篇(一):服务粒度的艺术 - 简化架构与避免服务泛滥
    一、背景上周小组有个需求上线牵扯9个应用(小组目前维护了26个服务,由于团队系统业务属性特征基于高可用、高性能原则拆分,有些是合理的,有些不是很合理的),同时上周OpsReview的一个微服务滥用典范案例(Promise服务A调用服务B,服务B只是读个配置数据返回,无具体业务逻辑),OpsReview会上也......
  • 探讨篇(二):分层架构的艺术 - 打造合理且高效的架构体系
    上篇从服务粒度角度进行了探讨,本文继续从服务内的分层角度探讨。本文的观点源自我在学习与实践过程中的深思熟虑,尚处于不断探索和验证的阶段。希望能“抛砖引玉”,激发更多的讨论与交流。让我们共同进步,在探讨与实证中寻求真知。一、背景应用分层看似直观,但实践中常见误区:开放接......
  • 中移ML307A(C-SDK,OpenCPU)学习开发-程序固件烧录说明
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/ML307A_OPEN"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p> 安装驱动1,解压 2,根据自己......