小程序入门

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

  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详情页"
     }
    
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容