小程序开发——小程序项目的配置与生命周期

1.app.json配置属性

app.json配置属性

2.页面配置

app的页面配置指的是pages属性, pages数组的第一个页面将默认作为小程序的启动页。利用开发工具新建页面时,则pages属性对应的数组将自动添加该页面的路径,若是在硬盘中添加文件的形式则不会触发该效果。pages属性配置示例代码如下所示:

{
  "pages": [
    "pages/index/index",
    "pages/logs/logs"
  ],
  }

上述代码中pages数组里页面路径之间用英文逗号分开,最后一个页面路径不加逗号,这里要注意json文件的语法,如不能添加注释在json文件中等。

3.窗口配置

window属性对应的是一个json对象,可用于配置小程序顶部navigationBar的颜色、标题文字,且均作用于全局。如果页面的json文件不再进行单独的配置,全部页面都将默认使用app.json文件中window属性的配置。window的子属性说明如表所示:

|---------------------------------------|----------|---------|------------------------------------------------------------------|
| 属性名称 | 类型 | 默认值 | 解释 |
| navigationBar backgroundColor | HexColor | #000000 | 导航栏背景颜色,默认值表示黑色。 |
| navigationBarTextStyle | String | white | 导航栏标题颜色,默认值表示白色,该属性值只能是white或black。 |
| navigationBarTitleText | String |   | 导航栏标题文字内容,默认无文字内容 |
| navigationStyle | String | default | 导航栏样式,default表示默认格式。custom表示自定义导航栏,只保留右上角的小图标(微信版本6.6.0以上支持此功能)。 |
| backgroundColor | HexColor | #ffffff | 窗口的背景颜色,默认值表示白色。 |
| backgroundTextStyle | String | dark | 下拉加载的样式,选填dark或light。 |
| backgroundColorTop | String | #ffffff | 顶部窗口的背景颜色,只有iOS有效(微信版本6.5.16以上支持此功能)。 |
| backgroundColorBottom | String | #ffffff | 底部窗口的背景颜色,只有iOS有效(微信版本6.5.16以上支持此功能) |
| enablePullDownRefresh | Boolean | FALSE | 是否开启下拉刷新功能。 |
| onReachBottomDistance | Number | 50 | 页面上拉触底事件触发时距页面底部距离,单位为像素px。 |

4.tabBar配置

tabBar属性:tabBar是固定在软件主界面底部的类似于单选按钮作用的横条,选中不同的选项按钮后,主界面就切换成不同的页面。tabBar的配置属性如表所示。

tabBar配置实例

"微信小程序示例",主界面使用了tabBar

"微信小程序示例"的app.json源代码:

"tabBar": {
    "color": "#7A7E83",
    "selectedColor": "#3cc51f",
    "borderStyle": "black",
    "backgroundColor": "#ffffff",
    "list": [{ "pagePath": "page/component/index",
           "iconPath": "image/icon_component.png",
           "selectedIconPath": "image/icon_component_HL.png",
           "text": "组件" },
          { "pagePath": "page/API/index",
           "iconPath": "image/icon_API.png",
           "selectedIconPath": "image/icon_API_HL.png",
           "text": "接口" },
          { "pagePath": "page/cloud/index",
           "iconPath": "image/icon_cloud.png",
           "selectedIconPath": "image/icon_cloud_HL.png",
           "text": "云开发" } ] }

5.网络超时配置

networkTimeout属性用于设置网络超时时间,其子属性配置如表所示:

|-------------------|--------|--------|---------|---------------------------|
| 属性 | 类型 | 必填 | 默认值 | 说明 |
| request | Number | 否 | 60000 | wx.request 超时时间,单位毫秒 |
| connectSocket | Number | 否 | 60000 | wx.connectSocket超时时间,单位毫秒 |
| uploadFile | Number | 否 | 60000 | wx.uploadFile超时时间,单位毫秒 |
| downloadFile | Number | 否 | 60000 | wx.downloadFile超时时间,单位毫秒 |

6.权限配置

接口权限

代码说明

permission属性用于小程序接口权限相关设置,字段类型为Object。以位置权限为例,小程序若想要获取用户的位置信息,需在app.json中配置permission属性,代码如下所示:

{
  "pages": ["pages/index/index"],
  "permission": {
    "scope.userLocation": {
      "desc": "你的位置信息将用于小程序位置接口的效果展示" 
    }
  }
}

用户信息、地理位置等权限出于隐私原因需经过用户授权后才能获取,因此,在首次调用小程序的wx.getLocation等接口获取用户定位时会跳出弹窗,提醒用户进行授权,代码如下所示:

wx.getSetting({ //wx.getSetting用于获取小程序当前需授权接口的授权情况
      success(res) {
        if (!res.authSetting['scope.userLocation']) {// scope是一个长列表,包含所有权限, 
          wx.authorize({ //则调用wx.authorize弹出弹窗
            scope: 'scope.userLocation',
            success() {
              // 用户已经同意小程序使用定位功能,后续调用不会弹窗询问
              // wx.getLocation({...}) }  })} }})

permission属性配置地理位置用途的授权弹窗如图所示:

需要注意的是,图5-2的项目是使用了申请了正式APPID的小程序项目,若使用测试号,如果测试号小程序本身已授权位置权限,则上述授权代码不会再进行弹窗询问授权。

后台能力权限

requiredBackgroundModes属性用于申明需要后台运行的能力,属性值类型为数组。目前该属性支持以下后台能力:

audio: 后台音乐播放 location: 后台定位

示例代码如下:

{
  "pages": ["pages/index/index"],
  "requiredBackgroundModes": ["audio", "location"]
}

在此处申明了后台运行的接口,开发版和体验版上可以直接生效,正式版还需通过审核。

7.小程序的生命周期

小程序生命周期函数

小程序的生命周期主要有初始化、启动和切后台,分别对应onLaunch、onShow、 onHide三个函数,而这三个函数是定义在app.js项目逻辑文件中,在注册小程序时作为参数传入函数APP()的。生命周期函数具体说明如表所示:

小程序生命周期测试案例

新建项目Chapter05,新建lifeCycle页面。在自动新建的app.js文件中可以看到如下代码:

//app.js项目逻辑文件
App({
  onLaunch: function () {
   //省略
  },
  globalData: {  userInfo: null  }
})

APP函数中传入的大型参数中就包括onLaunch方法,它主管整个项目生命周期的初始化环节,除了onLaunch方法之外,还有onShow以及onHide,可以添加上这两个方法在app.js进行测试,代码如下所示:

//app.js项目逻辑文件
App({
  onLaunch: function () {
    console.log("---onLaunch--");
  },
  onShow: function () {
    console.log("---onShow--");
  },
  onHide: function () {
    console.log("---onHide--");
  }
})

8.使用app对象的案例讲解

实现效果

调用app对象可以使用app.js中定义的全局函数和变量。本节介绍一个传递用户名的案例,首先定义app.js中的变量和函数,然后在其他页面中使用app对象,并调用app.js中的函数以获取全局用户名,案例实现效果如图所示

app.js中定义全局变量与函数

//app.js
App({
  onLaunch: function () {
    //项目启动时逻辑
  },
  /** 定义在app.js中的全局函数 */
  testApp(){
    this.globalData.userName='Toky'
  },
  globalData: {
    userName: null  //定义在app.js中的全局变量
  }
})

页面获取app对象

<!--index.wxml-->
<view class='container'>
  <view class='page-body'>
    <text class='h1'>使用app对象的案例讲解</text>
    <view class='demo-box'>
      <view class="title">点击按钮调用app.js中testApp函数</view>
      <button type="primary" bindtap="getUserName">点击调用</button>
      <view class="title">app.js中定义的全局用户名是:
        <text>{{name}}</text>
      </view>
    </view>
  </view>
</view>

//index.js
const app = getApp() //获取应用实例
Page({
  data: {
    name:null
  },
  //事件处理函数
  getUserName: function() {
    app.testApp()
    this.setData({ name: app.globalData.userName})
  }
})

9.小结

主要讲解了小程序项目层面的配置与生命周期等,具体涉及app.json文件作用的小程序全局配置,app.js文件作用的小程序项目的3个周期函数运行情况,最后结合案例讲解了app对象的具体使用。

相关推荐
说私域2 分钟前
基于开源 AI 智能名片、S2B2C 商城小程序的用户获取成本优化分析
人工智能·小程序
mosen8683 分钟前
Uniapp去除顶部导航栏-小程序、H5、APP适用
vue.js·微信小程序·小程序·uni-app·uniapp
qq22951165021 小时前
微信小程序的汽车维修预约管理系统
微信小程序·小程序·汽车
尚梦8 小时前
uni-app 封装刘海状态栏(适用小程序, h5, 头条小程序)
前端·小程序·uni-app
paopaokaka_luck12 小时前
基于Spring Boot+Vue的助农销售平台(协同过滤算法、限流算法、支付宝沙盒支付、实时聊天、图形化分析)
java·spring boot·小程序·毕业设计·mybatis·1024程序员节
Bessie23415 小时前
微信小程序eval无法使用的替代方案
微信小程序·小程序·uni-app
蜕变菜鸟15 小时前
小程序跳转另一个小程序
小程序
18 小时前
躺平成长-代码开发,利用kimi开发小程序(09)
小程序
21 小时前
微信小程序运营日记(第四天)
微信小程序·小程序
guanpinkeji21 小时前
旧衣回收小程序:提高回收效率,扩大服务范围
大数据·小程序·团队开发·软件开发·小程序开发·旧衣回收·旧衣回收小程序