小程序入门

要开发小程序首先要明白下面几个问题

  1. 我们如何创建小程序,如何对项目的目录结构分析?
  2. 一个小程序页面的生命周期是什么?
  3. 如何增加页面?
  4. 如何设置导航栏的属性?
  5. 小程序是如何将视图层和逻辑层进行绑定的?

小程序的文件结构

一个小程序首先有四个应用入口文件:

  • app.js:设置一些项目的全局变量,小程序逻辑,初始化APP
  • app.json:小程序的全局配置,比如导航、窗口、页面http请求跳转等。全局配置页面文件的路径、窗口表现、设置网络超时时间、设置多 tab 等。
  • app.wxss:项目全局样式
  • project.config.json:项目配置文件

一个页面主要是包含以下四个文件,这四个文件必须是相同的名字和路径,最好以页面所在的文件夹名字为标准:

  • xxx.wxml:页面的结构(必须)
  • xxx.wxss:页面的样式
  • xxx.json:页面的配置文件
  • xxx.js:页面的脚本文件(必须)

页面可以嵌套页面,但是建议不要超过5个层级。

app.json文件
"pages": [ //设置页面的路径
  "pages/index/index", //不需要写index.wxml,index.js,index,wxss,框架会自动寻找并整合
  "pages/logs/logs"
],
"window": { //设置默认窗口的表现形式
  "navigationBarBackgroundColor": "#ffffff", //顶部导航栏背景色
  "navigationBarTextStyle": "black", //顶部导航文字的颜色 black/white
  "navigationBarTitleText": "微信接口功能演示", //顶部导航的显示文字
  "backgroundColor": "#eeeeee", //窗口的背景色
  "backgroundTextStyle": "light", //下拉背景字体、loading 图的样式,仅支持 dark/light
  "enablePullDownRefresh": "false", //是否支持下拉刷新 ,不支持的话就直接不写!
  "disableScroll": true, //  设置true不能上下滚动,true/false,注意!只能在 page.json 中有效,无法在 app.json 中设置该项。
},
"tabBar": { //底部tab或者顶部tab的表现,是个数组,最少配置2个,最多5个
  "list": [{ //设置tab的属性,最少2个,最多5个
    "pagePath": "pages/index/index", //点击底部 tab 跳转的路径
    "text": "首页", //tab 按钮上的文字
    "iconPath": "../img/a.png", //tab图片的路径
    "selectedIconPath": "../img/a.png" //tab 在当前页,也就是选中状态的路径
  }, {
    "pagePath": "pages/logs/logs",
    "text": "日志"
  }],
  "color": "red", //tab 的字体颜色
  "selectedColor": "#673ab7", //当前页 tab 的颜色,也就是选中页的
  "backgroundColor": "#2196f3", //tab 的背景色
  "borderStyle": "white", //边框的颜色 black/white
  "position": "bottom" //tab处于窗口的位置 top/bottom
  },
"networkTimeout": { //默认都是 60000 秒一分钟
    "request": 10000, //请求网络超时时间 10000 秒
    "downloadFile": 10000, //链接服务器超时时间 10000 秒
      "uploadFile": "10000", //上传图片 10000 秒
    "downloadFile": "10000" //下载图片超时时间 10000 秒
  },
"debug": true //项目上线后,建议关闭此项,或者不写此项

可以看到共有五个部分可以配置,分别是pages, window, tarBar, networkTimeout和debug

pages:定义的是这个小程序由哪些页面组成。在以后需要新增或者减少页面时,都需要在这里进行设置,有几个页面pages数组就有几项。pages是一个数组,而数组的第一项就是小程序的初始页面.

window: 定义的是窗口的配置信息。
属性类型默认值描述

navigationBarBackgroundColorHexColor#000000导航栏背景颜色,如"#000000"

navigationBarTextStyleStringwhite导航栏标题颜色,仅支持 black/white

navigationBarTitleTextStringa导航栏标题文字内容

backgroundColorHexColor#ffffff窗口的背景色

backgroundTextStyleStringdark下拉背景字体、loading 图的样式,仅支持 dark/light

enablePullDownRefreshBooleanfalse是否开启下拉刷新
tarBar: 用来定义 tabBar 的表现

tabBar 是一个数组,只能配置最少2个、最多5个 tab,tab 按数组的顺序排序。

我们可以在项目目录下添加一个images文件,用来存放我们的图片文件。

注意:目前小程序只支持网络图片或者base64图片,使用本地图片需要将图片转为base64代码

networkTimeout: 用来设置各种网络请求的超时时间。
属性类型必填说明

requestNumber否wx.request的超时时间,单位毫秒

connectSocketNumber否wx.connectSocket的超时时间,单位毫秒

uploadFileNumber否wx.uploadFile的超时时间,单位毫秒

downloadFileNumber否wx.downloadFile的超时时间,单位毫秒

小程序的生命周期

(1)App()生命周期

  • 用户首次打开小程序,触发 onLaunch(全局只触发一次)。

  • 小程序初始化完成后,触发onShow方法,监听小程序显示。

  • 小程序从前台进入后台,触发 onHide方法。

  • 小程序从后台进入前台显示,触发 onShow方法。

  • 小程序后台运行一定时间,或系统资源占用过高,会被销毁。

  • 小程序出错,触发onError

  • 前台、后台定义: 当用户点击左上角关闭,或者按了设备 Home 键离开微信,小程序并没有直接销毁,而是进入了后台;当再次进入微信或再次打开小程序,又会从后台进入前台

      //app.js
      App({
        onLaunch: function() { 
            //小程序初始化(全局只触发一次)
        },
        onShow: function() {
            //小程序显示
        },
        onHide: function() {
            //小程序隐藏
        },
        onError: function(msg) {
            //小程序错误
        },
      })    
      //其他 开发者可以添加任意的函数或数据到 Object 参数中,用 this 可以访问
    

(2)Page页面生命周期(每个页面也有自己的生命周期)

  • 小程序注册完成后,加载页面,触发onLoad方法。

  • 页面载入后触发onShow方法,显示页面。

  • 首次显示页面,会触发onReady方法,渲染页面元素和样式,一个页面只会调用一次。

  • 当小程序后台运行或跳转到其他页面时,触发onHide方法。

  • 当小程序有后台进入到前台运行或重新进入页面时,触发onShow方法。

  • 当使用重定向方法wx.redirectTo(OBJECT)或关闭当前页返回上一页wx.navigateBack(),触发onUnload

    //index.js
    Page({
    onLoad: function(options) {
    //页面加载-----(一个页面只会调用一次)
    },
    onReady: function() {
    //页面渲染-----(一个页面只会调用一次)
    },
    onShow: function() {
    //页面显示-----(每次打开页面都会调用一次)
    },
    onHide: function() {
    //页面隐藏-----(当navigateTo或底部tab切换时调用)
    },
    onUnload: function() {
    //页面卸载-----(当redirectTo或navigateBack的时候调用)
    },
    })
    //其他 开发者可以添加任意的函数或数据到 object 参数中,在页面的函数中用 this 可以访问

(3)应用生命周期影响页面生命周期

  • 小程序初始化完成后,页面首次加载触发onLoad,只会触发一次。
  • 当小程序进入到后台,先执行页面onHide方法再执行应用onHide方法。
  • 当小程序从后台进入到前台,先执行应用onShow方法再执行页面onShow方法

视图层和逻辑层数据绑定

<!--index.wxml-->
<view>{{text}}</view>
<button bindtap="changeText"> Change normal data </button>
<view>{{array[0].text}}</view>
<button bindtap="changeItemInArray"> Change Array data </button>
<view>{{obj.text}}</view>
<button bindtap="changeItemInObject"> Change Object data </button>
<view>{{newField.text}}</view>
<button bindtap="addNewField"> Add new data </button>


//index.js
Page({
  data: {
    text: 'init data',
    array: [{text: 'init data'}],
    object: {
      text: 'init data'
    }
  },
  changeText: function() {
    this.setData({
      text: 'changed data'
    })
  },
  changeItemInArray: function() {
    this.setData({
      'array[0].text':'changed data'
    })
  },
  changeItemInObject: function(){
    this.setData({
      'object.text': 'changed data'
    });
  },
  addNewField: function() {
    this.setData({
      'newField.text': 'new data'
    })
  }
})

创建小程序页面步骤

  1. 在pages 中添加一个目录 ,选中page,右击鼠标新建一个文件夹test(或者点击+号,逐个添加目录,添加目录下面所需要的文件)
  1. 新建一个wxml 文件,在test文件夹底下新建一个wxml空文件
  1. 编辑test.wxml 文件

     <view class="container">  
            <text>这是test页面!!!</text>  
     </view>  
    
  2. 同样的方法,创建test.js文件,编辑test.js文件

     //test.js  
     //获取应用实例  
     var app = getApp()  
     Page({  
       data: {  
         userInfo: {}  
       },  
       onLoad: function () {  
         console.log('onLoad test');  
       }  
     })  
    
  3. 将test 页面加入 app.json,打开全局文件 app.json,在文件里面添加 "pages/test/test"(加入一条 test 页面所在的目录 )

  1. 在首页加入跳转访问链接, 在首页写一个页面入口 ,跳转到我们要测试的页面上,直接在首页 pages/index/index.wxml 添加一段代码一句链接

     <view class="btn-area">  
        <navigator url="/pages/test/test" hover-class="navigator-hover">跳转test页面</navigator>  
      </view>  
    
  2. 测试,保存代码,点击上面的编译按钮,所有代码运行起来,点击首页的“跳转到test页面”,跳转成功。

  3. 设置页面标题,找到 pages/test/ 目录 新建一个 test.json 文件 加入如下代码。

     {
       "navigationBarTitleText": "test详情页"
     }
    
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容