小程序学习笔记-文件结构

项目文件

  • app.js 小程序的脚本代码,监听处理小程序的生命周期函数、申明全局变量、调用框架提供的API等等

    1. App();函数注册一个小程序
    2. onLaunch();程序初始化完成时触发,全局指触发一次
    3. onShow(options);启动或从后台进入前台显示时触发
    4. onHide();从前台进入后台会触发
    5. onError(msg);脚本错误或API调用失败会触发,并带上错误信息
    6. getUserInfo(){};获取用户信息,需要先调用wx.login();
    7. wx.login({});调用微信登录接口,获取登录凭证(code),进而获取用户登录信息,包括用户的唯一标识(openid),及本次登录的会话密钥(session_key)。用户数据的加解密通讯需要密钥来完成。
  • app.json 搜对整个小程序的全局配置:配置小程序是由哪些页面组成,配置小程序的窗口背景色,配置导航条样式,配置默认标题。

    1. ”pages”: [],配置页面路由
    2. “window”:{}设置默认页面的窗口表现
  • app.wxss 是整个小程序的公共样式表我们可以在页面组件的class上直接使用app.wxss中申明的样式规则

  • 创建页面

    1. *.js 文件 :脚本文件 — 在这个文件中我们可以监听并处理页面的生命周期函数、获取小程序实例,声明并处理数据,响应页面交互事件等。
    2. *.json 文件 :配置文件 — 页面的配置文件是非必要的。当有页面的配置文件时,配置项在该页面会覆盖 app.json 的 window 中相同的配置项。如果没有指定的页面配置文件,则在该页面直接使用 app.json 中的默认配置。
    3. *.wxss 文件 :页面样式文件
    4. *.wxml 文件 :页面结构文件

文件结构

  1. 配置:

    • app.json

      1. 1. ”pages”: [] 设置页面路径
        2. “window”: { //设置默认窗口的表现(颜色都是十六进制的) 
           “navigationBarBackgroundColor”: #000, //导航栏背景颜色 
           “navigationBarTextStyle”: white/black, //导航栏标题颜色,仅支持black/white 
           “navigationBarTitleText”: string, //导航栏标题 
           “backgroundColor”: #fff, //窗口的背景颜色 
           “backgroundTextStyle”: dark, //下拉背景字体、loading 图的样式,仅支持 dark/light 
           “enablePullDownRefresh”: boolean //是否开启下拉刷新,详见页面相关事件处理函数。 
           }
        3. “tabBar”: { //设置底部的tab 
           “color”: #ddd, //tab上文字的默认颜色 
           “selectedColor”: #333, //选中tab时的颜色 
           “backgroundColor” #ccc, //tab背景颜色 
           “borderStyle”: black/white, //tabBar上边框的颜色,仅支持black/white 
           “list”: [ //tab 的列表 
           { 
           “pagePath”: ‘../..’, //pages中定义的页面路径 
           “text”: string, //tab上的按钮文字 
           “iconPath”: ‘../..’, //图片路径,icon 大小限制为40kb,建议尺寸为 81px * 81px,当 postion 为 top 时,此参数无效 
           “selectedIconPath”: ‘../..’ //选中时的图片路径,icon 大小限制为40kb,建议尺寸为 81px * 81px ,当 postion 为 top 时,此参数无效 
           } 
           ], 
           “position”: top/bottom // 
           }
        4. “networkTime”: { //网络超时时间 
           “request”: 10 000, //wx.request 的请求超时时间,默认60 000(下面都是) 
           “connectSocket”: 10 000, //wx.connectSocket的超时时间 
           “uploadFile”: 10 000, //wx.uploadFile的超时时间 
           “downloadFile”: 10 000, //wx.downloadFile的超时时间 
           }
        5. “debug”: boolean 是否开启debug模式
        
    • page.json :页面的.json只能设置 window 相关的配置项,以决定本页面的窗口表现,所以无需写 window 这个键

    • 属性如下:

      { 
      “navigationBarBackgroundColor”: #000, 
      “navigationBarTextStyle”: black/white, 
      “navigationBarTitleText”: string, 
      “backgroundColor”: #ddd, 
      “backgroundTextStyle”: dark/light, 
      “enablePullDownRefresh”: boolean, 
      “disableScroll”: boolean //设置为 true 则页面整体不能上下滚动;只在 page.json 中有效,无法在 app.json 中设置该项(默认 false ) 
      }
      

逻辑层

注册程序:App(options);

App() 函数用来注册一个小程序。接受一个 object 参数,其指定小程序的生命周期函数等。

options = {
        onLaunch: function(){},     //生命周期函数--监听小程序初始化(只会触发一次)  
        onShow: function(){},       //生命周期函数--监听小程序显示(每次显示小程序都会触发)  
        onHide: function(){},       //生命周期函数--监听小程序隐藏(每次小程序从前台进入后台都会触发)  
        onError: function(msg){},      //当小程序发生脚本错误,或者 api 调用失败时,会触发 onError 并带上错误信息    
        userFun:function(){}        //用户自定义函数   
    }

问题:

  1. onLaunch 和 onShow 的参数
  • path: string 打开小程序的路径
  • query: {} 打开小程序的query
  • scene: number 打开小程序的场景值
  • shareTicket: string ???
  1. getApp()函数:获取小程序实例
  • console.log(getApp().globalData);
  • App()必须在app.js中注册,并且不能注册多个
  • 不要再App()内部使用getApp(),用this即可
  • 不要再onLaunch时调用getCurrentPage(),此时page还没有生成
  • 通过getApp()获取实例后,不要随意调用生命周期函数 ??????

注册页面

Page(options) 函数用来注册一个页面。接受一个 object 参数,其指定页面的初始数据、生命周期函数、事件处理函数等。

options = {
        data: {},   // 页面的初始数据  
        onLoad: function(){},
        onReady: function(){},      //生命周期函数--监听页面初次渲染完成    
        onShow: function(){},
        onHide: function(){},
        onUnload: function(){},     //生命周期函数--监听页面卸载  当redirectTo或navigateBack的时候调用。  
        onPullDownRefresh: function(){},        //页面相关事件处理函数--监听用户下拉动作  
        onReachButton: function(){},        //页面上拉触底事件的处理函数 
        onShareAppMessage: function(){},    //用户点击右上角转发 
        route: string,      //当前页面的路径   
        userFun:function(){}
    } 

更改data中的数据需要用到this.setData(key: value);方法,否则不会生效

页面路由

  • 页面栈:

    1. 页面栈以栈(先进后出)的形式维护页面与页面之间的关系;
    2. 小程序提供了getCurrentPages()函数获取页面栈,第一个元素为首页,最后一个元素为当前页面。
    3. 使用wx.navigateTo每新开一个页面,页面栈大小加1,直到页面栈大小为5为止;
    4. 使用wx.navigateTo重复打开界面,页面栈大小加1,直到页面栈大小为5为止;
    5. 使用wx.redirectTo重定向,当前页面被替换,页面栈不变,如果新页面之前打开过,则得到的是两个状态独立的同一页面
    6. 使用wx.navigateBack返回,当delta为1,等同于左上返回按钮,页面栈减一;当delta为2,关闭依次五级页面和四级页面,当前页面为三级页面,页面栈大小减2;以此类推,直到栈底为止,也就是首页。
    
  • 哪些情况会触发页面跳转

    1. 小程序启动,初始化第一个页面

    2. 打开新页面,调用 API wx.navigateTo 或使用组件

          wx.navigateTo({
              //目的页面地址,原页面保留
              url: 'pages/logs/index',
              success: function(res){},
              ...
          })
      
    3. 页面重定向,调用 API wx.redirectTo 或使用组件

          wx.redirectTo({
              //目的页面地址,原页面被关闭,不可返回
              url: 'pages/logs/index',
              success: function(res){},
              ...
          })
      
          <navigator url="pages/logs/index" hover-class="navigator-hover">跳转</navigator>
          // 当该组件添加redirect属性时,等同于wx.redirectTo接口;默认redirect属性为false,等同于wx.navigateTo接口。
      
    4. 页面返回,调用 API wx.navigateBack或用户按左上角返回按钮

          wx.navigateBack({
              delta: 1
          })
          // delta为1时表示返回上一页,为2时表示上上一页,以此类推;如果dalta大于已打开的页面总数,则返回到首页。返回后,元界面会销毁。
      
    5. tarbar切换 页面全部出栈,只留下新的 Tab 页面

    6. 重加载 页面全部出栈,只留下新的 Tab 页面

  • 如何正确使用页面跳转: 官方规定小程序最多只能有五个页面同时存在,意思是在不关闭页面的情况,最多新开五个页面,页面深度为5。

    1. 对于可逆操作,使用wx.navigateTo,比如从首页跳转到二级页面,从二级页面返回是不需要重新渲染首页
    2. 对于不可逆操作,使用wx.redirectTo,比如用户登录成功后,关闭登录页面,不能返回到登录界面。
    3. 对于一些介绍性等不常用页面wx.redirectTo或wx.navigatrBack
    4. 对于类似九宫格、列表项,使用
    5. 不要在首页使用wx.redirectTo,这样会导致应用无法返回首页
    6. 简化需求、简化流程;核心功能在两三个页面完成便是张小龙追求『小而美』的体现
  • getCurrentPages(): 用于获取当前页面栈的实例,以数组形式按栈的顺序给出,第一个元素为首页,最后一个元素为当前页面。

  • 注意:

      1. navigateTo, redirectTo 只能打开非 tabBar 页面。
      2. switchTab 只能打开 tabBar 页面。
      3. reLaunch 可以打开任意页面。
      4. 页面底部的 tabBar 由页面决定,即只要是定义为 tabBar 的页面,底部都有 tabBar。
      5. 调用页面路由带的参数可以在目标页面的onLoad中获取。
    
  • 模块化

  • 文件作用域

    1. 在js文件中申明的函数只在该文件中有效,
    2. 通过全局的getApp()函数可以获得全局的应用实例:
        //app.js
        App({
            globalData: 1
        })
        // index.js
        var app = getApp();
        app.globalData ++;
        // logs.js
        console.log(getApp().globalData);  
    
  • 模块化

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

推荐阅读更多精彩内容