微信小程序

346 阅读4分钟

微信小程序项目结构

image.png 项目的基本组成结构为:
① pages 用来存放所有小程序的页面;
② utils 用来存放工具类的模块(例如:格式化时间的自定义模块);
③ app.js 小程序项目的入口文件;
④ app.json 小程序项目的全局配置文件;
⑤ app.wxss 小程序项目的全局样式文件;
⑥ project.config.json 项目的配置文件;
⑦ sitemap.json 用来配置小程序及其页面是否允许被微信索引。

小程序页面的组成部分(每个页面由 4个基本文件组成):
① .js 文件(页面的脚本文件,存放页面的数据、事件处理函数等);
② .json 文件(当前页面的配置文件,配置窗口的外观、表现等);
③ .wxml 文件(页面的模板结构文件);
④ .wxss 文件(当前页面的样式表文件)。

微信小程序项目文件对应的源码

全局配置文件

// app.json:
{
    // 必填,页面路径列表
    "pages": [
        "pages/index/index",
        "pages/logs/logs"
    ],
    // 非必填,全局的默认窗口表现 
    "window": {
        "backgroundTextStyle": "light",
        "navigationBarBackgroundColor": "#fff",
        "navigationBarTitleText": "Weixin",
        "navigationBarTextStyle": "black"
    },
    // 非必填,指定使用升级后的 weui 样式
    "style": "v2",
    // 必填,指明 sitemap.json 的位置
    "sitemapLocation": "sitemap.json",
    // 非必填,配置自定义组件代码按需注入
    "lazyCodeLoading": "requiredComponents"
}

project.config.json 配置文件

// project.config.json:
{
    // 描述
    "description": "项目配置文件",
    // 打包配置选项
    "packOptions": {
        "ignore": []
    },
    // 项目设置
    "setting": {
        // 不检查安全域名和 TLS 版本
        "urlCheck": false,
        // 启用 es6 转 es5
        "es6": true,
        "enhance": false,
        // 上传代码时样式自动补全
        "postcss": true,
        // 上传代码时自动压缩
        "minified": true,
        // 新特征,文档中未描述
        "newFeature": true,
        "coverView": true,
        "autoAudits": false,
        "showShadowRootInWxmlPanel": true,
        "scopeDataCheck": false,
        "checkInvalidKey": true,
        "checkSiteMap": true,
        "uploadWithSourceMap": true,
        "babelSetting": {
            "ignore": [],
            "disablePlugins": [],
            "outputPath": ""
        }
    },
    // 编译类型
    "compileType": "miniprogram",
    // 基础库版本
    "libVersion": "2.8.3",
    // 项目的appid,只在新建项目时读取
    "appid": "wxd0ae7e1556f1e238",
    // 项目名称,只在新建项目时读取
    "projectname": "miniprogram-3",
    // 调试配置选项
    "debugOptions": {
        // 配置调试时于调试器 Sources 面板隐藏源代码的hidedInDevtools 的配置规则和 packOptions.ignore 是一致的。
        "hidedInDevtools": []
    },
    "isGameTourist": false,
    "simulatorType": "wechat",
    "simulatorPluginLibVersion": {},
    // 编译模式,增加编译模式时,会添加到下面的对应数组
    "condition": {
        "search": {
            "current": -1,
            "list": []
        },
        "conversation": {
            "current": -1,
            "list": []
        },
        "game": {
            "currentL": -1,
            "list": []
        },
        "miniprogram": {
            "current": -1,
            "list": []
        }
    }
}

sitemap.json 配置文件

// sitemap.json:
{
    "desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html",
    // 必填,索引规则列表
    "rules": [{
        // 非必填,可选值: "allow"、"disallow",默认值为 "allow", 表示命中该规则的页面是否能被索引
        "action": "allow",
        // 必填,可取值为 "*"、页面的路径,`*` 表示所有页面,不能作为通配符使用
        "page": "*"
    }]
}

小程序入口文件:每个小程序都需要在 app.js 中调用 App 方法注册小程序实例,绑定生命周期回调函数、错误监听和页面不存在监听函数等。

// app.js
// 注册小程序。接受一个 `Object` 参数,其指定小程序的生命周期回调等。
App({
    // 非必填,生命周期回调——监听小程序初始化。
    onLaunch (options) {
        // Do something initial when launch.
    },
    // 非必填,生命周期回调——监听小程序启动或切前台。
    onShow (options) {
        // Do something when show.
    },
    // 非必填,生命周期回调——监听小程序切后台。
    onHide () {
        // Do something when hide.
    },
    // 非必填,错误监听函数。
    onError (msg) {
        console.log(msg)
    },
    // 非必填,开发者可以添加任意的函数或数据变量到 `Object` 参数中,用 `this` 可以访问。
    globalData: 'I am global data'
})

页面 js文件:对于小程序中的每个页面,都需要在页面对应的 js 文件中进行注册,指定页面的初始数据、生命周期回调、事件处理函数等。

// pages/index/index.js:
// 整个小程序只有一个 App 实例,是全部页面共享的。开发者可以通过 `getApp` 方法获取到全局唯一
// 的 App 实例,获取 App 上的数据或调用开发者注册在 `App` 上的函数。
const appInstance = getApp(); 

// 使用 Page 构造器注册小程序中的一个页面。接受一个 `Object` 类型参数,其指定页面的初始数
// 据、生命周期回调、事件处理函数等。
Page({
    // 页面的初始数据
    data: {
        text: "This is page data."
    },
    // 生命周期回调—监听页面加载
    onLoad: function(options) {
        // 页面创建时执行
        console.log(appInstance.globalData); // 'I am global data'
    },
    // 生命周期回调—监听页面显示
    onShow: function() {
        // 页面出现在前台时执行
    },
    // 生命周期回调—监听页面初次渲染完成
    onReady: function() {
        // 页面首次渲染完毕时执行
    },
    // 生命周期回调—监听页面隐藏
    onHide: function() {
        // 页面从前台变为后台时执行
    },
    // 生命周期回调—监听页面卸载
    onUnload: function() {
        // 页面销毁时执行
    },
    // 监听用户下拉动作
    onPullDownRefresh: function() {
        // 触发下拉刷新时执行
    },
    // 页面上拉触底事件的处理函数
    onReachBottom: function() {
        // 页面触底时执行
    },
    // 用户点击右上角转发
    onShareAppMessage: function () {
        // 页面被用户分享时执行
    },
    // 页面滚动触发事件的处理函数
    onPageScroll: function() {
        // 页面滚动时执行
    },
    // 页面尺寸改变时触发,详见 响应显示区域变化
    onResize: function() {
        // 页面尺寸变化时执行
    },
    // 当前是 tab 页时,点击 tab 时触发
    onTabItemTap(item) {
        // tab 点击时执行
        console.log(item.index)
        console.log(item.pagePath)
        console.log(item.text)
    },
    // 事件响应函数
    viewTap: function() {
        this.setData({
            text: 'Set some data for updating view.'
        }, function() {
            // this is setData callback
        })
    },
    // 自由数据
    customData: {
        hi: 'MINA'
    }
})