微信小程序开发【三】-- 项目结构概述

系列文章目录

微信小程序开发【一】-- 初识小程序 传送门
微信小程序开发【二】-- 小程序入门 传送门
微信小程序开发【三】-- 项目结构概述 传送门
微信小程序开发【四】-- 配置详解 传送门
微信小程序开发【五】-- wxml详解 传送门
微信小程序开发【六】-- wxss详解 传送门
微信小程序开发【七】-- js详解 传送门
微信小程序开发【八】-- 页面栈和模块化 传送门
微信小程序开发【九】-- 初识小程序云开发 传送门
微信小程序开发【十】-- 云函数/云数据库/云存储 传送门



一、项目目录

1. 代码总体结构

在这里插入图片描述
在小程序项目的根目录下面包含3个app开头的文件(app.js、app.json、app.wxss)以及pages目录与utils目录。其中pages目录存放了2个页面(index和log)的构成文件。每个页面都是一个目录,目录名就是唯一的页面名,其下由以页面名为前缀的2~4个文件组成。
在这里插入图片描述
左侧的3个app文件必须放在小程序根目录下面,其他文件由开发者自由控制。

2. 小程序根目录代码结构

  • app.js是小程序的脚本代码,用来监听并处理小程序的生命周期、声明全局变量、调用框架提供的丰富API等。

app.js代码示例

// app.js
App({
  onLaunch() {
    // 展示本地存储能力
    const logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs)

    // 登录
    wx.login({
      success: res => {
        // 发送 res.code 到后台换取 openId, sessionKey, unionId
      }
    })
  },
  globalData: {
    userInfo: null
  }
})
  • app.json是对整个小程序的全局配置,配置小程序是由哪些页面组成,配置小程序的窗口背景颜色、配置导航条样式、配置默认标题等。(json文件中不可以加注释)

app.json代码示例

{
  "pages": [
    "pages/index/index",
    "pages/logs/logs"
  ],
  "window": {
    "backgroundTextStyle": "light",
    "navigationBarBackgroundColor": "#fff",
    "navigationBarTitleText": "Weixin",
    "navigationBarTextStyle": "black"
  },
  "style": "v2",
  "sitemapLocation": "sitemap.json",
  "lazyCodeLoading": "requiredComponents"
}
  • app.wxss是整个小程序的公共样式表。

app.wxss代码示例

/**app.wxss**/
.container {
  height: 100%;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: space-between;
  padding: 200rpx 0;
  box-sizing: border-box;
} 

其中app.js和app.json是必需的。

3. 页面代码结构

小程序页面是由同路径下同名不同后缀的2~4个文件组成:

  • .js后缀的文件是脚本文件。

index.js代码示例

// index.js
// 获取应用实例
const app = getApp()

Page({
  data: {
    motto: 'Hello World',
    userInfo: {},
    hasUserInfo: false,
    canIUse: wx.canIUse('button.open-type.getUserInfo'),
    canIUseGetUserProfile: false,
    canIUseOpenData: wx.canIUse('open-data.type.userAvatarUrl') && wx.canIUse('open-data.type.userNickName') // 如需尝试获取用户信息可改为false
  },
  // 事件处理函数
  bindViewTap() {
    wx.navigateTo({
      url: '../logs/logs'
    })
  },
  onLoad() {
    if (wx.getUserProfile) {
      this.setData({
        canIUseGetUserProfile: true
      })
    }
  },
  getUserProfile(e) {
    // 推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认,开发者妥善保管用户快速填写的头像昵称,避免重复弹窗
    wx.getUserProfile({
      desc: '展示用户信息', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
      success: (res) => {
        console.log(res)
        this.setData({
          userInfo: res.userInfo,
          hasUserInfo: true
        })
      }
    })
  },
  getUserInfo(e) {
    // 不推荐使用getUserInfo获取用户信息,预计自2021年4月13日起,getUserInfo将不再弹出弹窗,并直接返回匿名的用户个人信息
    console.log(e)
    this.setData({
      userInfo: e.detail.userInfo,
      hasUserInfo: true
    })
  }
})
  • .json后缀的文件是配置文件。(如存在,会层叠覆盖app.json的window中相同的配置项,json文件中不可以加注释)
  • .wxss后缀的样式表文件。(如存在,会层叠覆盖app.wxss中的样式规则)

index.wxss代码示例

/**index.wxss**/
.userinfo {
  display: flex;
  flex-direction: column;
  align-items: center;
  color: #aaa;
}

.userinfo-avatar {
  overflow: hidden;
  width: 128rpx;
  height: 128rpx;
  margin: 20rpx;
  border-radius: 50%;
}

.usermotto {
  margin-top: 200px;
}
  • .wxml后缀的文件是页面结构文件。

index.wxml代码示例

<!--index.wxml-->
<view class="container">
  <view class="userinfo">
    <block wx:if="{{canIUseOpenData}}">
      <view class="userinfo-avatar" bindtap="bindViewTap">
        <open-data type="userAvatarUrl"></open-data>
      </view>
      <open-data type="userNickName"></open-data>
    </block>
    <block wx:elif="{{!hasUserInfo}}">
      <button wx:if="{{canIUseGetUserProfile}}" bindtap="getUserProfile"> 获取头像昵称 </button>
      <button wx:elif="{{canIUse}}" open-type="getUserInfo" bindgetuserinfo="getUserInfo"> 获取头像昵称 </button>
      <view wx:else> 请使用1.4.4及以上版本基础库 </view>
    </block>
    <block wx:else>
      <image bindtap="bindViewTap" class="userinfo-avatar" src="{{userInfo.avatarUrl}}" mode="cover"></image>
      <text class="userinfo-nickname">{{userInfo.nickName}}</text>
    </block>
  </view>
  <view class="usermotto">
    <text class="user-motto">{{motto}}</text>
  </view>
</view>

其中.js文件和.wxml文件时必需的。

二、app.js和page.js

.js文件是页面逻辑处理层。我们可以按需在app.js和page.js中添加程序在生命周期的每个阶段相应的事件。如在页面的onLoad时进行数据的下载,onShow的时候进行数据的更新。

  • app.js
App({
  onLaunch: function(){
    // 启动时执行的初始化工作
  },
  onShow: function(){
    // 小程序从后台进入前台时,触发执行的操作
  },
  onHide: function(){
    // 小程序从前台进入后台时,触发执行的操作
  },
  globalConf: {
    indexDate:'',
    matchdata:''
  },
  dataCache:[],
  globalData:'I am global data'
})
  • page.js
Page({
  Data:{
    Text:'This is page data.'
  },
  onLoad: function(options){
    // 页面加载时执行的初始化工作
  },
  onReady: function(){
    // 页面就绪后触发执行的操作
  },
  onShow: function(){
    // 页面打开时,触发执行的操作
  },
  onHide: function(){
    // 页面隐藏时,触发执行的操作
  },
  onUnload: function(){
    // 页面关闭时,触发执行的操作
  },
  //Event Handler
  viewTap: function(){
    this.setData({
      text:'set some data for updating view.'
    })
  },
})

app.js文件中有3个生命周期函数:onLaunch、onShow、onHide(还有一个onError,程序出现错误时触发)
page.js文件中有5个生命周期函数:onLoad、onReady、onShow、onHide、onUnload。

三、生命周期

  • 完整的小程序执行生命周期
    在这里插入图片描述

  • 一个page的生命周期从onLoad开始,整个生命周期内onLoad、onReady、onUnload这三个时间仅执行一次,而onHide和onShow在每次页面隐藏和显示时都会触发。

  • 当用户手动触发左上角的退出箭头时,小程序仅触发app.onHide,下次进入小程序时会触发app.onShow以及当前page.onShow。

  • 仅当小程序在后台运行超过一定时间未被唤起、或者用户手动在小程序的控制栏里点击退出程序、或者小程序内存占用过大被关闭时,小程序将被销毁,会触发page.onUnload事件。

四、开发步骤

  • 创建小程序实例(定义、配置及页面执行关联)。即编写3个app前缀的文件,它们共通描述了整个小程序主体逻辑、生命周期及页面构成、样式等。小程序实例将由appServer线程运行。

  • 创建页面(页面结构与事务处理逻辑)。在小程序中一个完整的页面(page)是由.js、.json、.wxml、.wxss这四个文件组成。小程序页面由view线程执行。


总结

  • 小程序主体部分由三个文件组成,必须放在项目的根目录
文件必须作用
app.js小程序逻辑
app.json小程序公共配置
app.wxss小程序公共样式表
  • 一个小程序页面由四个文件组成
文件必须作用
页面名.js页面逻辑
页面名.wxml界面布局文件
页面名.wxss页面样式表
页面名.json页面配置
  • 微信小程序中的每一个页面的“路径+页面名”都需要写在app.json的pages中,且pages中的第一个页面是小程序的首页。
  • 理解小程序的代码结构和生命周期后,我们基本上可以归纳出一个小程序开发的两大主要步骤:创建小程序实例、创建页面。
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
**微信小程序案例:基于Django微信平台的小区服务系统** **一、资源概述** 本资源是一套完整的小程序毕业设计项目,主题为“基于Django微信平台的小区服务系统”。项目旨在通过微信小程序为小区居民提供便捷的生活服务,同时利用Django后端框架实现高效稳定的数据处理与响应。 **二、功能特点** 1. **用户管理**:支持用户注册、登录、修改个人信息等功能。 2. **物业服务**:提供物业公告发布、在线报修、投诉建议等功能,方便居民与物业的沟通。 3. **周边商家**:展示小区周边的商家信息,包括餐饮、超市、医疗等,并提供优惠券领取功能。 4. **社区活动**:发布社区活动信息,鼓励居民参与,增强社区凝聚力。 5. **二手市场**:提供一个二手物品交易的平台,方便居民处理闲置物品。 6. **天气查询**:实时获取并显示当地天气信息,方便居民出行。 7. **智能问答**:基于AI技术,提供智能问答服务,解答居民关于生活、物业等方面的问题。 **三、技术架构** 前端:微信小程序 后端:Django框架 数据库:MySQL 第三方库:uni-app、uView UI组件库、Django REST framework等 **四、部署与运行** 1. 下载源码及说明文档。 2. 安装Python环境,配置虚拟环境。 3. 安装MySQL数据库,导入项目数据库文件。 4. 安装项目所需依赖包。 5. 启动Django后端服务器。 6. 使用微信开发者工具导入前端项目,配置相关API接口。 7. 部署至服务器或云服务上,进行测试与优化。 **五、二次开发与定制** 本项目采用模块化设计,代码结构清晰,便于二次开发与定制。您可以根据需求添加新功能模块,或对现有功能进行优化改进。同时,项目文档详细记录了各部分的实现方法与技术细节,为开发者提供了良好的参考与指导。
**微信小程序:加油站设计与实现** 此资源包包含了一个完整的计算机专业毕业设计项目——"加油站微信小程序的设计与实现"。该项目旨在通过微信小程序为车主提供一站式的加油服务体验,包括油站查询、油价查询、在线支付、会员优惠等功能。 **一、项目概述** 随着移动互联网的普及,越来越多的车主希望通过手机快速找到附近的加油站并享受便捷的加油服务。基于这一需求,本项目采用微信小程序作为开发平台,结合腾讯地图API和微信支付API,实现了以下核心功能: 1. 油站查询:用户可快速搜索附近或特定区域的加油站,查看详细信息如地址、电话、油价等。 2. 油价查询:实时显示各加油站的油价信息,帮助用户做出更经济的加油选择。 3. 在线支付:支持微信支付,用户加油后可直接在小程序内完成支付,无需现金交易。 4. 会员优惠:注册成为会员可享受更多优惠活动和积分兑换礼品。 **二、技术实现** 1. 前端开发:使用微信官方提供的WeUI组件库进行界面设计,确保用户体验的一致性和友好性。 2. 后端开发:基于Node.js和Express框架搭建后端服务,负责处理用户请求和数据存储。 3. 数据接口:调用腾讯地图API获取地理位置信息和油价数据,调用微信支付API实现线上支付功能。 **三、项目亮点** 1. 完整的业务逻辑和流程设计,满足用户实际使用需求。 2. 界面美观大方,操作简便,符合微信小程序的设计规范。 3. 代码结构清晰,注释详细,便于二次开发和定制。 4. 提供完善的测试报告和用户手册,帮助开发者快速上手和理解项目。 此资源包不仅可作为计算机专业毕业设计的参考案例,也适合有需求的开发者进行二次开发和定制,共同推动加油站行业的数字化升级。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老六聊编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值