《微信小程序:开发入门及案例详解》—— 2.3 框架主体文件

2.3 框架主体文件

框架主体文件由app.json、app.js、app.wxss构成,这3个文件必须放置在项目根目录,一个小程序只有一份,它们负责小程序整体的配置:

  • app.json:小程序公共设置,配置小程序全局设置。
  • app.js:小程序逻辑文件,主要用于注册小程序全局实例,编译时会和其他页面逻辑文件打包成一份JavaScript文件。
  • app.wxss:小程序公共样式表,对所有页面的布局文件都有效。
  • app.json和app.js是必须存在的,app.wxss不是必须创建的,可以根据项目情况进行创建。接下来我们逐个分析每个文件。

2.3.1 配置文件(app.json)

app.json是小程序配置文件,编写时要严格遵循json的格式规范。app.json在程序加载时加载,负责对小程序的全局配置,其配置项有:

  • pages:设置页面路径,必填项。
  • window:设置默认页面的窗口表现。
  • tabBar:设置tab的表现。
  • networkTimeout:设置网络超时时间。
  • debug:设置是否开启debug模式,默认关闭。
    app.json文件内容整体结构如下:
{
  // 页面路径设置
  "pages" : [],
  // 默认页面的窗口设置
  "window" : {},
  // 底部tab设置
  "tabBar" : {},
  // 设置网络请求API的超时时间
  "networkTimeout" : {},
  // 是否为debug模式
  "debug" : false
}
1. pages配置

pages负责注册小程序页面,必须填写,value值为一个包含页面路径的数组,用来指定小程序由哪些页面构成,每一项由页面“路径+文件名”组成,如下所示:

{
  "pages" : [
    "mypages/index/index",
    "mypages/page2/mypagefilename",
    "otherpages/index/index"
  ]
}

pages数组中页面路径不需要填写文件后缀名,渲染页面时框架会自动寻找路径.json,.js,.wxml,.wxss四个文件进行整合,如上文配置中“mypages/index/index”路径,页面加载时框架会自动匹配寻找“mypages/index/index.json”“mypages/index/index.js”“mypages/index/index.wxml”“mypages/index/index.wxss”这四个文件,路径中的文件名可以和目录名不一致,但在项目过程中,为了便于管理,建议文件名和目录名保持一致。pages配置数组第一项代表小程序的初始页面。小程序中增加、删除页面,都需要对pages进行修改,并且重启项目。

2. window配置
  • window负责设置小程序状态栏、导航条、标题、窗口背景色等系统级样式。属性有:
  • navigationBarBackgroundColor:导航栏背景颜色,值为HexColor(十六进制颜色值),如:“#ff83fa”,默认值为#000000。
  • navigationBarTextStyle:导航栏标题颜色,仅支持black/white,默认值为white。
  • navigationBarTitleText:导航栏标题文字内容。
  • backgroundColor:窗口背景色,值为HexColor(十六进制颜色值),如:“#ff83fa”,默认值为#ffffff。
  • backgroundTextStyle:下拉背景字体、Loading图的样式,仅支持dark/light。
  • enablePullDownRefresh:是否开启下拉刷新,默认为false,开启后,当用户下拉时会触发页面onPullDownRefresh事件。
    配置项目如图2-5所示。

3. tabBar配置

当程序顶部或底部需要菜单栏时,我们可以通过配置tabBar快速实现,tabBar是个非必填项目。可配置属性如下:

  • color:tab上的文字默认颜色,值为HexColor(十六进制颜色值),必填项。
  • selectedColor:tab上的文字选中时的颜色,值为HexColor(十六进制颜色值),必填项。
  • backgroundColor:tab的背景色,值为HexColor(十六进制颜色值),必填项。
  • borderStyle:tabbar上边框的颜色,仅支持black/white,默认值为black。
  • list:tab的列表,必填项,其值为一个数组,最少2个、最多5个tab,数组中每一项是一个对象,代表一个tab的相关配置,每项的相关配置如下:
    • ◇ pagePath:页面路径,必须在pages中先定义,必填项。
      ◇ text:tab上按钮的文字,必填项。

◇ iconPath:tab上icon图片的相对路径,icon大小限制为40kb,必填项。
◇ selectedIconPath:选中时图片的相对路径,icon大小限制为40kb,必填项。
◇ position:tab在顶部或底部显示,可选值为bottom、top,默认值为bottom。

示例代码见代码清单2-1。
代码清单2-1 app.json

{
  "pages" : [
    "mypages/index/index",
    "mypages/list/list"
  ],
  "tabBar" : {
    "color" : "#000000",
    "selectedColor" : "#ff7f50",
    "backgroundColor" : "#ffffff",
    "borderStyle" : "black",
    "list" : [
      {
        "iconPath" : "images/home.png",
        "selectedIconPath" : "images/home-selected.png",
        "pagePath" : "mypages/index/index",
        "text" : "首页"
      },
      {
        "iconPath" : "images/search.png",
        "selectedIconPath" : "images/search-selected.png",
        "pagePath" : "mypages/list/list",
        "text" : "搜索"
      },
      {
        "iconPath" : "images/list.png",
        "selectedIconPath" : "images/list-selected.png",
        "pagePath" : "mypages/list/list",
        "text" : "列表"
      }
    ],
    "borderStyle" : "bottom"
  }
}

配置后页面效果如图2-6所示。

4. networkTimeout配置

小程序中各种网络请求API的超时时间只能通过networkTimeout统一设置,不能在API中单独设置,具体的网络请求API可参考后面章节,networkTimeout支持的属性有:

  • request:设置wx.request的超时时间,单位毫秒。
  • connectSocket:设置wx.connectSocket的超时时间,单位毫秒。
  • uploadFile:设置wx.uploadFile的超时时间,单位毫秒。
  • downloadFile:设置wx.downloadFile的超时时间,单位毫秒。

示例代码如下:

{
  "pages" : [
    "mypages/index/index"
  ],
  "networkTimeout" : {
    "request" : 60000,
    "connectSocket" : 60000
  }
}
5. debug配置

此配置项控制是否开启debug模式,默认是关闭的。开启debug模式后,在开发者工具的控制面板,调试信息以info的形式输出,如图2-7所示。其中信息有Page的注册、页面路由、数据更新、事件触发,可以帮助开发者快速定位一些常见问题。

示例代码如下:

{
  "pages" : [
    "mypages/index/index",
    "mypages/list/list"
  ],
  "debug" : true
}

以上便是app.json的5类配置项,这些配置项都是全局的,小程序中除了app.json这种全局配置文件还有页面配置文件,当路由到对应页面时,页面配置文件的配置项将会覆盖全局配置,页面配置文件将在后续内容中进行详细介绍。

2.3.2 小程序逻辑(app.js)

小程序中逻辑文件分为页面逻辑文件和小程序逻辑文件,app.js便是小程序逻辑文件,在这个文件中,我们可以通过App()函数注册小程序生命周期函数、全局方法和全局属性,已注册的小程序实例可以在其他逻辑层代码中通过getApp()获取。

1. 注册小程序

App()函数用于注册一个小程序,参数为一个Object对象,在这个参数对象中我们可以注册自定义方法和属性供全局使用,就像在quick start项目中,我们利用App()注册了用户登录信息。App()函数必须在app.js中注册,且不能注册多个,其参数属性如下:

  • onLaunch:生命周期函数,监听小程序初始化。当小程序初始化完成时,就会触发onLaunch,onLoaunch事件全局只会触发一次。
  • onShow:生命周期函数,监听小程序显示。当小程序启动,或者从后台进入前台显示时都会触发onShow。
  • onHide:生命周期函数,监听小程序隐藏。当小程序从前台进入后台会触发。
  • 其他:开发者可以添加任意的函数或数据到Object参数中,这些属性会被注册到小程序对象中,其他逻辑文件可以通过getApp()函数获取已注册的小程序实例。

关于小程序生命周期函数的执行时机我们要特别讲解一下:当启动一个小程序时,首先会先依次触发onLaunch和onShow方法,然后通过app.json的pages属性注册相应的页面,最后根据默认路径加载首页;当用户点击左上角关闭,或者按了设备Home按钮离开微信时,小程序并没有直接销毁,而是进入了后台,这两种情况都会触发onHide方法;当再次唤醒微信(针对点击Home按钮离开微信)或再次从微信中打开小程序时,又会从后台进入前台,这时会触发onShow方法。只有当小程序进入后台一定时间,或者系统资源占用过高,才会被真正销毁。
注册小程序示例代码如下:

App( {
  onLaunch : function() {
    // 小程序初始化完成时执行
  },
  onShow : function() {
    // 显示小程序时执行
  },
  onHide : function() {
    // 隐藏小程序时执行
  },
  globalFunction : '我是全局函数',
  globalData : '我是全局属性'
} );
2. 获取小程序实例

注册小程序后,在其他逻辑文件中,可以通过全局函数getApp()获取小程序实例,例如:

var app  = getApp();
console.log( app.globalData ); 

在App()注册的函数中,我们可以使用this直接获取App实例,而不用getApp()方法。通过getApp()获取实例后,可以获取注册的属性、调用注册的方法,但不要私自调用生命周期函数(onLaunch、onShow、onHide),这样会打乱项目逻辑,除非你已经对它们很熟悉。

2.3.3 全局样式(app.wxss)

app.wxss是全局样式表,对项目中每个页面都有效,可将一些系统级别的统一样式风格写入这个文件,页面渲染时,框架页中的.wxss文件样式会覆盖app.wxss中相同的选择器样式。WXSS是小程序基于CSS拓展的一套样式语言,它实现了CSS大部分规则,其具体介绍请参考下一节。
小程序框架主体相关的文件app.json、app.js、app.wxss我们已经全部介绍完成,下面为大家介绍框架页面相关的文件。

时间: 2025-01-28 12:35:56

《微信小程序:开发入门及案例详解》—— 2.3 框架主体文件的相关文章

《微信小程序开发入门精要》——第2章,第2.1节水平排列

第2章 布局微信小程序开发入门精要布局是任何支持UI的技术都会涉及到的.小程序的布局采用了和React Native相同的flex(弹性布局)方式,使用方法也类似(只是属性名不同而已).因此,如果读者已经对React Native的布局比较了解,那么将非常容易掌握小程序布局.即使对React Native的布局不了解,通过对本章的学习,也可以掌握小程序布局的核心技术. 本章要点水平排列布局水平折行排列布局垂直排列布局垂直折列排列布局水平排列对齐布局垂直排列对齐布局水平等间隔排列布局带边距的水平等

《微信小程序开发入门精要》——第1章,第1.1节什么是微信小程序

第1章 微信小程序入门微信小程序开发入门精要微信小程序是腾讯在2016年9月推出的一种新型的微信扩展.尽管目前还没有正式开发,但依然受到了非常多的关注.这主要是由于腾讯的影响力,以及微信在国内拥有的庞大的用户群体.在2017年1月9日,腾讯已经正式上线了小程序,这意味着任何人都可以在手机微信中使用小程序.由于目前小程序的数量还不多,所以现在进入小程序开发领域,可能会赶上小程序的第一拨红利.OK,废话少说,从本章开始,让我们深入了解微信小程序的原理以及详细的开发过程. 本章要点什么是微信小程序注册

微信小程序 滚动选择器(时间日期)详解及实例代码

微信小程序  滚动选择器(时间日期)详解 微信小程序自己封装了很多控件,用起来确实很方便,如果这是Android里面,还需要自己去定义,不废话,效果图: 一起来看看怎么实现的呢?看完你应该就该说,尼玛,这就行啦-. 这个效果呢,要用到picker组件,动画从底部弹起的滚动选择器,现支持三种选择器,通过mode来区分,分别是普通选择器,时间选择器,日期选择器,默认是普通选择器. 看下相应的属性: 具体的来看看代码,布局: <view class="section" > <

微信小程序开发入门教程

在这篇微信小程序开发教程中,我们将向你介绍快速试用和体验微信小程序开发工具和官方示例Demo. 本系列教程将引导你完成如下任务: 下载微信web开发者工具和小程序官方Demo. 添加小程序示例Demo到项目 体验小程序常用组件及接口   第一部分 下载开发者工具和官方Demo   微信小程序开发者工具 为了帮助开发者简单和高效地开发微信小程序,微信官方推出了全新的微信小程序开发者工具,该工具集成了开发调试.代码编辑及程序发布等功能. 下载地址为  windows 64 . windows 32 

《微信小程序开发入门精要》——第1章,第1.6节开发第一个微信小程序

1.6 开发第一个微信小程序 本节将从零开始开发一款微信小程序.该程序是一个猜拳游戏,功能很简单,单击"开始"按钮后,会快速切换"锤子""剪刀"和"布",直到按"停止"按钮,会显示"锤子""剪刀"和"布"中的一个,该游戏可以实现双方或多方猜拳.本节的目的是通过该例子,将开发微信小程序的过程完整讲述一遍,从配置开发环境.建立小程序项目,一直到将微信小

《微信小程序:开发入门及案例详解》—— 导读

前 言      自2016年9月21日微信小程序公布以来,微信技术群中关于小程序的讨论就没间断过,这是又一次创业的好机会,尤其是对中小企业扩大网络影响力很有利.我们在抓紧时间学习小程序的过程中,总结并实践了小程序的功能,并希望通过这本书传达给广大的读者.我们在编写过程中正临电商行业中最忙的几个月,双11.双12.圣诞节.元旦节等需求已经堆叠如山,我和边思白天处理公司需求,晚上编写书籍,几乎没有周末,这样坚持了几个月终于完成本书,直至交稿时才如释重负.      小程序刚发布不久,很多功能都还在

《微信小程序:开发入门及案例详解》—— 2.4 框架页面文件

2.4 框架页面文件 小程序中一个框架页面包含4个文件,同一框架页面的这4个文件必须具有相同的路径与文件名,进入小程序时或页面跳转时,小程序会根据app.json配置的路径找到对应的资源进行渲染. ◇ .js文件:页面逻辑文件,必要项. ◇ .wxml文件:页面结构文件,必要项. ◇ .wxss文件:页面样式文件. ◇ .json文件:页面配置文件. 与框架主体文件相比框架页面文件多了一种页面结构文件,其余3个文件和框架主体文件的功能类同,下面我们一一讲解每个文件作用. 2.4.1 页面配置文件

《微信小程序:开发入门及案例详解》—— 1.3 第一个小程序

1.3 第一个小程序 完成开发准备后我们便可以开始编写小程序,微信小程序的开发十分简单,大家可以快速上手.下面我们利用官方提供的dmeo让大家对小程序开发有初步认识.1)打开微信开发者工具.第一次启动需要扫描二维码登录,如图1-9所示,开发权限配置参照上一小节. 2)登录后选择"添加项目".3)在填写项目信息之前,先创建一个空目录作为项目资源目录,这里我们以E:\weixin\demo为例.4)填写项目信息.如果没有AppID可以选择"无AppID":填写项目名称,

《微信小程序:开发入门及案例详解》—— 2.5 模块化

2.5 模块化 小程序逻辑层语言是JavaScript,而JavaScript作为脚本语言在设计初期仅是为了实现简单的页面交互,由Brendan Eich在1995年花了不到十天时间发明出来,语言本身缺失了很多用于支撑大型项目的设计,而现在前端业务逻辑越来越复杂,代码也越来越多,很多问题就暴露出来.模块化主要解决JavaScript中命名冲突和文件依赖这两个问题,现在模块化在前端中使用比较广泛,如Nodejs.Requirejs.Seajs.Webpack等,它们大部分都遵循或者接近Common

《微信小程序:开发入门及案例详解》—— 第2章 小程序开发核心 2.1 简介

第2章 小程序开发核心 上一章讲解了小程序创建流程,本章主要为大家讲解小程序框架及核心内容.小程序框架可让开发者在微信中用尽可能简单.高效的方式开发出具有原生App体验的服务,这套框架控制着小程序完整的生命周期,负责页面的加载.渲染.销毁等工作,它是小程序的核心,学习小程序前,我们一定要对这套框架有深入的了解.本章主要对小程序目录结构.文件类型进行详细分析,重点介绍小程序视图层WXML.MXSS,逻辑层JS,这些是小程序开发的核心内容.本章个别小节内容比较深,学习过程中不必过于深究,能对框架有个