小程序?qū)W習(xí)筆記-文件結(jié)構(gòu)

項(xiàng)目文件

  • app.js 小程序的腳本代碼薄货,監(jiān)聽處理小程序的生命周期函數(shù)懈玻、申明全局變量、調(diào)用框架提供的API等等

    1. App();函數(shù)注冊一個(gè)小程序
    2. onLaunch();程序初始化完成時(shí)觸發(fā)锋拖,全局指觸發(fā)一次
    3. onShow(options);啟動(dòng)或從后臺(tái)進(jìn)入前臺(tái)顯示時(shí)觸發(fā)
    4. onHide();從前臺(tái)進(jìn)入后臺(tái)會(huì)觸發(fā)
    5. onError(msg);腳本錯(cuò)誤或API調(diào)用失敗會(huì)觸發(fā)焊切,并帶上錯(cuò)誤信息
    6. getUserInfo(){};獲取用戶信息,需要先調(diào)用wx.login();
    7. wx.login({});調(diào)用微信登錄接口躏筏,獲取登錄憑證(code)板丽,進(jìn)而獲取用戶登錄信息,包括用戶的唯一標(biāo)識(shí)(openid)趁尼,及本次登錄的會(huì)話密鑰(session_key)埃碱。用戶數(shù)據(jù)的加解密通訊需要密鑰來完成。
  • app.json 搜對(duì)整個(gè)小程序的全局配置:配置小程序是由哪些頁面組成酥泞,配置小程序的窗口背景色砚殿,配置導(dǎo)航條樣式,配置默認(rèn)標(biāo)題芝囤。

    1. ”pages”: [],配置頁面路由
    2. “window”:{}設(shè)置默認(rèn)頁面的窗口表現(xiàn)
  • app.wxss 是整個(gè)小程序的公共樣式表我們可以在頁面組件的class上直接使用app.wxss中申明的樣式規(guī)則

  • 創(chuàng)建頁面

    1. *.js 文件 :腳本文件 — 在這個(gè)文件中我們可以監(jiān)聽并處理頁面的生命周期函數(shù)瓮具、獲取小程序?qū)嵗暶鞑⑻幚頂?shù)據(jù)凡人,響應(yīng)頁面交互事件等。
    2. *.json 文件 :配置文件 — 頁面的配置文件是非必要的叹阔。當(dāng)有頁面的配置文件時(shí)挠轴,配置項(xiàng)在該頁面會(huì)覆蓋 app.json 的 window 中相同的配置項(xiàng)。如果沒有指定的頁面配置文件耳幢,則在該頁面直接使用 app.json 中的默認(rèn)配置岸晦。
    3. *.wxss 文件 :頁面樣式文件
    4. *.wxml 文件 :頁面結(jié)構(gòu)文件

文件結(jié)構(gòu)

  1. 配置:

    • app.json

      1. 1. ”pages”: [] 設(shè)置頁面路徑
        2. “window”: { //設(shè)置默認(rèn)窗口的表現(xiàn)(顏色都是十六進(jìn)制的) 
           “navigationBarBackgroundColor”: #000, //導(dǎo)航欄背景顏色 
           “navigationBarTextStyle”: white/black, //導(dǎo)航欄標(biāo)題顏色,僅支持black/white 
           “navigationBarTitleText”: string, //導(dǎo)航欄標(biāo)題 
           “backgroundColor”: #fff, //窗口的背景顏色 
           “backgroundTextStyle”: dark, //下拉背景字體睛藻、loading 圖的樣式启上,僅支持 dark/light 
           “enablePullDownRefresh”: boolean //是否開啟下拉刷新,詳見頁面相關(guān)事件處理函數(shù)。 
           }
        3. “tabBar”: { //設(shè)置底部的tab 
           “color”: #ddd, //tab上文字的默認(rèn)顏色 
           “selectedColor”: #333, //選中tab時(shí)的顏色 
           “backgroundColor” #ccc, //tab背景顏色 
           “borderStyle”: black/white, //tabBar上邊框的顏色店印,僅支持black/white 
           “l(fā)ist”: [ //tab 的列表 
           { 
           “pagePath”: ‘../..’, //pages中定義的頁面路徑 
           “text”: string, //tab上的按鈕文字 
           “iconPath”: ‘../..’, //圖片路徑冈在,icon 大小限制為40kb,建議尺寸為 81px * 81px按摘,當(dāng) postion 為 top 時(shí)包券,此參數(shù)無效 
           “selectedIconPath”: ‘../..’ //選中時(shí)的圖片路徑,icon 大小限制為40kb炫贤,建議尺寸為 81px * 81px 溅固,當(dāng) postion 為 top 時(shí),此參數(shù)無效 
           } 
           ], 
           “position”: top/bottom // 
           }
        4. “networkTime”: { //網(wǎng)絡(luò)超時(shí)時(shí)間 
           “request”: 10 000, //wx.request 的請求超時(shí)時(shí)間兰珍,默認(rèn)60 000(下面都是) 
           “connectSocket”: 10 000, //wx.connectSocket的超時(shí)時(shí)間 
           “uploadFile”: 10 000, //wx.uploadFile的超時(shí)時(shí)間 
           “downloadFile”: 10 000, //wx.downloadFile的超時(shí)時(shí)間 
           }
        5. “debug”: boolean 是否開啟debug模式
        
    • page.json :頁面的.json只能設(shè)置 window 相關(guān)的配置項(xiàng)侍郭,以決定本頁面的窗口表現(xiàn),所以無需寫 window 這個(gè)鍵

    • 屬性如下:

      { 
      “navigationBarBackgroundColor”: #000, 
      “navigationBarTextStyle”: black/white, 
      “navigationBarTitleText”: string, 
      “backgroundColor”: #ddd, 
      “backgroundTextStyle”: dark/light, 
      “enablePullDownRefresh”: boolean, 
      “disableScroll”: boolean //設(shè)置為 true 則頁面整體不能上下滾動(dòng);只在 page.json 中有效亮元,無法在 app.json 中設(shè)置該項(xiàng)(默認(rèn) false ) 
      }
      

邏輯層

注冊程序:App(options);

App() 函數(shù)用來注冊一個(gè)小程序猛计。接受一個(gè) object 參數(shù),其指定小程序的生命周期函數(shù)等苹粟。

options = {
        onLaunch: function(){},     //生命周期函數(shù)--監(jiān)聽小程序初始化(只會(huì)觸發(fā)一次)  
        onShow: function(){},       //生命周期函數(shù)--監(jiān)聽小程序顯示(每次顯示小程序都會(huì)觸發(fā))  
        onHide: function(){},       //生命周期函數(shù)--監(jiān)聽小程序隱藏(每次小程序從前臺(tái)進(jìn)入后臺(tái)都會(huì)觸發(fā))  
        onError: function(msg){},      //當(dāng)小程序發(fā)生腳本錯(cuò)誤有滑,或者 api 調(diào)用失敗時(shí),會(huì)觸發(fā) onError 并帶上錯(cuò)誤信息    
        userFun:function(){}        //用戶自定義函數(shù)   
    }

問題:

  1. onLaunch 和 onShow 的參數(shù)
  • path: string 打開小程序的路徑
  • query: {} 打開小程序的query
  • scene: number 打開小程序的場景值
  • shareTicket: string ???
  1. getApp()函數(shù):獲取小程序?qū)嵗?/li>
  • console.log(getApp().globalData);
  • App()必須在app.js中注冊嵌削,并且不能注冊多個(gè)
  • 不要再App()內(nèi)部使用getApp(),用this即可
  • 不要再onLaunch時(shí)調(diào)用getCurrentPage(),此時(shí)page還沒有生成
  • 通過getApp()獲取實(shí)例后毛好,不要隨意調(diào)用生命周期函數(shù) ?苛秕?肌访??艇劫?吼驶?

注冊頁面

Page(options) 函數(shù)用來注冊一個(gè)頁面。接受一個(gè) object 參數(shù)店煞,其指定頁面的初始數(shù)據(jù)蟹演、生命周期函數(shù)、事件處理函數(shù)等顷蟀。

options = {
        data: {},   // 頁面的初始數(shù)據(jù)  
        onLoad: function(){},
        onReady: function(){},      //生命周期函數(shù)--監(jiān)聽頁面初次渲染完成    
        onShow: function(){},
        onHide: function(){},
        onUnload: function(){},     //生命周期函數(shù)--監(jiān)聽頁面卸載  當(dāng)redirectTo或navigateBack的時(shí)候調(diào)用酒请。  
        onPullDownRefresh: function(){},        //頁面相關(guān)事件處理函數(shù)--監(jiān)聽用戶下拉動(dòng)作  
        onReachButton: function(){},        //頁面上拉觸底事件的處理函數(shù) 
        onShareAppMessage: function(){},    //用戶點(diǎn)擊右上角轉(zhuǎn)發(fā) 
        route: string,      //當(dāng)前頁面的路徑   
        userFun:function(){}
    } 

更改data中的數(shù)據(jù)需要用到this.setData(key: value);方法,否則不會(huì)生效

頁面路由

  • 頁面棧:

    1. 頁面棧以棧(先進(jìn)后出)的形式維護(hù)頁面與頁面之間的關(guān)系鸣个;
    2. 小程序提供了getCurrentPages()函數(shù)獲取頁面棧羞反,第一個(gè)元素為首頁,最后一個(gè)元素為當(dāng)前頁面囤萤。
    3. 使用wx.navigateTo每新開一個(gè)頁面昼窗,頁面棧大小加1,直到頁面棧大小為5為止;
    4. 使用wx.navigateTo重復(fù)打開界面,頁面棧大小加1,直到頁面棧大小為5為止涛舍;
    5. 使用wx.redirectTo重定向,當(dāng)前頁面被替換澄惊,頁面棧不變,如果新頁面之前打開過做盅,則得到的是兩個(gè)狀態(tài)獨(dú)立的同一頁面
    6. 使用wx.navigateBack返回缤削,當(dāng)delta為1,等同于左上返回按鈕吹榴,頁面棧減一亭敢;當(dāng)delta為2,關(guān)閉依次五級(jí)頁面和四級(jí)頁面图筹,當(dāng)前頁面為三級(jí)頁面帅刀,頁面棧大小減2让腹;以此類推,直到棧底為止扣溺,也就是首頁骇窍。
    
  • 哪些情況會(huì)觸發(fā)頁面跳轉(zhuǎn)

    1. 小程序啟動(dòng),初始化第一個(gè)頁面

    2. 打開新頁面锥余,調(diào)用 API wx.navigateTo 或使用組件

          wx.navigateTo({
              //目的頁面地址腹纳,原頁面保留
              url: 'pages/logs/index',
              success: function(res){},
              ...
          })
      
    3. 頁面重定向,調(diào)用 API wx.redirectTo 或使用組件

          wx.redirectTo({
              //目的頁面地址驱犹,原頁面被關(guān)閉嘲恍,不可返回
              url: 'pages/logs/index',
              success: function(res){},
              ...
          })
      
          <navigator url="pages/logs/index" hover-class="navigator-hover">跳轉(zhuǎn)</navigator>
          // 當(dāng)該組件添加redirect屬性時(shí),等同于wx.redirectTo接口雄驹;默認(rèn)redirect屬性為false佃牛,等同于wx.navigateTo接口。
      
    4. 頁面返回医舆,調(diào)用 API wx.navigateBack或用戶按左上角返回按鈕

          wx.navigateBack({
              delta: 1
          })
          // delta為1時(shí)表示返回上一頁俘侠,為2時(shí)表示上上一頁,以此類推蔬将;如果dalta大于已打開的頁面總數(shù)爷速,則返回到首頁。返回后霞怀,元界面會(huì)銷毀遍希。
      
    5. tarbar切換 頁面全部出棧,只留下新的 Tab 頁面

    6. 重加載 頁面全部出棧里烦,只留下新的 Tab 頁面

  • 如何正確使用頁面跳轉(zhuǎn): 官方規(guī)定小程序最多只能有五個(gè)頁面同時(shí)存在,意思是在不關(guān)閉頁面的情況禁谦,最多新開五個(gè)頁面胁黑,頁面深度為5。

    1. 對(duì)于可逆操作州泊,使用wx.navigateTo,比如從首頁跳轉(zhuǎn)到二級(jí)頁面丧蘸,從二級(jí)頁面返回是不需要重新渲染首頁
    2. 對(duì)于不可逆操作,使用wx.redirectTo,比如用戶登錄成功后遥皂,關(guān)閉登錄頁面力喷,不能返回到登錄界面。
    3. 對(duì)于一些介紹性等不常用頁面wx.redirectTo或wx.navigatrBack
    4. 對(duì)于類似九宮格演训、列表項(xiàng)弟孟,使用
    5. 不要在首頁使用wx.redirectTo,這樣會(huì)導(dǎo)致應(yīng)用無法返回首頁
    6. 簡化需求样悟、簡化流程拂募;核心功能在兩三個(gè)頁面完成便是張小龍追求『小而美』的體現(xiàn)
  • getCurrentPages(): 用于獲取當(dāng)前頁面棧的實(shí)例庭猩,以數(shù)組形式按棧的順序給出,第一個(gè)元素為首頁陈症,最后一個(gè)元素為當(dāng)前頁面蔼水。

  • 注意:

      1. navigateTo, redirectTo 只能打開非 tabBar 頁面。
      2. switchTab 只能打開 tabBar 頁面录肯。
      3. reLaunch 可以打開任意頁面趴腋。
      4. 頁面底部的 tabBar 由頁面決定,即只要是定義為 tabBar 的頁面论咏,底部都有 tabBar优炬。
      5. 調(diào)用頁面路由帶的參數(shù)可以在目標(biāo)頁面的onLoad中獲取。
    
  • 模塊化

  • 文件作用域

    1. 在js文件中申明的函數(shù)只在該文件中有效潘靖,
    2. 通過全局的getApp()函數(shù)可以獲得全局的應(yīng)用實(shí)例:
        //app.js
        App({
            globalData: 1
        })
        // index.js
        var app = getApp();
        app.globalData ++;
        // logs.js
        console.log(getApp().globalData);  
    
  • 模塊化

    1. 我們可以將一些公共的代碼抽離成為一個(gè)單獨(dú)的 js 文件穿剖,作為一個(gè)模塊。模塊只有通過 module.exports 或者 exports(不推薦使用) 才能對(duì)外暴露接口卦溢。
    2. 小程序目前不支持直接引入 node_modules , 開發(fā)者需要使用到 node_modules 時(shí)候建議拷貝出相關(guān)的代碼到小程序的目錄中糊余。
    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中調(diào)用  
        var comm = require(../common.js);
        Page({
            helloJack:function(){
                comm.sayHello("Jack");
            },
            goodByeRose: function(){
                comm.sayBye("Rose");
            }
        })
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末单寂,一起剝皮案震驚了整個(gè)濱河市贬芥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌宣决,老刑警劉巖蘸劈,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異尊沸,居然都是意外死亡威沫,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門洼专,熙熙樓的掌柜王于貴愁眉苦臉地迎上來棒掠,“玉大人,你說我怎么就攤上這事屁商⊙毯埽” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵蜡镶,是天一觀的道長雾袱。 經(jīng)常有香客問我,道長官还,這世上最難降的妖魔是什么芹橡? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮望伦,結(jié)果婚禮上僻族,老公的妹妹穿的比我還像新娘粘驰。我一直安慰自己,他們只是感情好述么,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布蝌数。 她就那樣靜靜地躺著,像睡著了一般度秘。 火紅的嫁衣襯著肌膚如雪顶伞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天剑梳,我揣著相機(jī)與錄音唆貌,去河邊找鬼。 笑死垢乙,一個(gè)胖子當(dāng)著我的面吹牛锨咙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播追逮,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼酪刀,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了钮孵?” 一聲冷哼從身側(cè)響起骂倘,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎巴席,沒想到半個(gè)月后历涝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡漾唉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年荧库,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赵刑。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡电爹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出料睛,到底是詐尸還是另有隱情,我是刑警寧澤摇邦,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布恤煞,位于F島的核電站,受9級(jí)特大地震影響施籍,放射性物質(zhì)發(fā)生泄漏居扒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一丑慎、第九天 我趴在偏房一處隱蔽的房頂上張望喜喂。 院中可真熱鬧瓤摧,春花似錦、人聲如沸玉吁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽进副。三九已至这揣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間影斑,已是汗流浹背给赞。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留矫户,地道東北人片迅。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像皆辽,于是被迫代替她去往敵國和親柑蛇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容