前端 | 微信小程序·隨筆記錄

小程序開發(fā)指南 | 微信小程序官網(wǎng) | 微信開發(fā)者工具下載 | 小程序全局配置

如果對小程序一點都不熟悉的話滑沧,可以先到官網(wǎng)看文檔熟悉熟悉,這里主要是我在看官網(wǎng)文檔做項目的過程中的一些記錄戒洼,也是自己對基礎(chǔ)知識的一個鞏固,會不斷完善。對了嗦明,如果邏輯上沒有問題朋贬,但在微信開發(fā)者工具上就顯示不了預(yù)期的效果凯楔,那記得真機調(diào)試下,有時候真的就是微信開發(fā)者工具的bug锦募,親身經(jīng)歷摆屯。

一、微信開發(fā)者工具

  1. 編譯里可對頁面設(shè)置參數(shù)
  2. 點擊“上傳”可上傳到微信小程序后臺管理以進行發(fā)布體驗版或者正式版等糠亩。
  3. 如果小程序要求兼容到iOS8以下版本虐骑,需要開啟樣式自動補全。開啟樣式自動補全赎线,在“設(shè)置”—“項目設(shè)置”—勾選“上傳代碼時樣式自動補全”廷没。
  4. 右擊目錄選擇“新建pages和新建component”會自動生成對應(yīng)頁面
  5. 想看哪個頁面,就可以把app.json中pages里的那個頁面路徑移到第一個就可以
  • app.wxss里的樣式為全局樣式垂寥,但不會應(yīng)用到components組件里
  • 事件以bind或者catch開頭 + 事件類型颠黎。例如:bindtap、catchtouchstart...

二滞项、小程序后臺管理[需要賬號]

  • 小程序名稱【發(fā)布前可修改2次】狭归、小程序簡稱【一年內(nèi)可修改2次】、小程序頭像【一年內(nèi)可申請修改5次】文判、小程序介紹【一個月可申請5次】过椎、服務(wù)類目【一個月可申請3次】

三、小程序相關(guān)知識點

1戏仓、通過App()注冊小程序疚宇,通過getApp()獲取全局對象

    //app.js  App()注冊一個小程序、小程序的入口方法【必須在app.js 中注冊柜去,且不能注冊多個】
    App({
      globalData: {
        userInfo:null,
        helloFromApp:'Hello,I am From App.js'
      },
      test:function(){
          console.log('test');
      }
    })
    // getApp():通過getApp獲取全局對象灰嫉,然后進行全局變量和全局方法的使用
    // 其他頁面中想調(diào)用全局變量和方法時
    var app = getApp();
    console.log(app.globalData.helloFromApp); // 調(diào)用全局變量
    app.test(); 

2、生命周期

整個小程序生命周期 App({})

//app.js
App({
  onLaunch: function (options) {
      // 小程序初始化完成時(全局只觸發(fā)一次) 
      // 程序銷毀(過一段時間沒有執(zhí)行嗓奢,或者手動刪除了小程序后再次添加)之后讼撒,再次啟動就會執(zhí)行
      console.log('onLaunch'); 
  },
  onShow: function (options) {
      // 小程序啟動,或從后臺進入前臺顯示時
      console.log('onShow');
  },
  onHide: function () {
      // 小程序從前臺進入后臺時,就會執(zhí)行
      console.log('onHide');
  },
  onError: function (msg) {
      // 小程序發(fā)生腳本錯誤,或者 api 調(diào)用失敗時觸發(fā)根盒,會帶上錯誤信息
      console.log(msg)
  },
  globalData: {
      userInfo: null
  }
})

頁面生命周期 page({})

Page({ 
  onLoad: function (options) {
    // 監(jiān)聽頁面加載
    // 頁面加載的時候執(zhí)行钳幅,只執(zhí)行一次
    console.log('頁面load');
  },
  onReady: function () {
    // 監(jiān)聽頁面第一次渲染完成
    // 只執(zhí)行一次
    console.log('頁面ready');
  },
  onShow: function () {
    // 只要頁面顯示,就會執(zhí)行
    console.log('頁面show');
  },
  onHide: function () {
    // 頁面隱藏炎滞,就會執(zhí)行
    console.log('頁面hide');
  },
  onUnload: function () {
    // 頁面卸載敢艰,就會執(zhí)行
    console.log('頁面unload');
  }
})

注意:

  1. tab頁面之間的相互切換,不會讓頁面重新加載(onLoad)册赛,也就不會卸載(onUnload)钠导,只會隱藏與顯示頁面,即:頁面切換只會交替執(zhí)行 onHide() 與 onShow() 函數(shù)
  2. 在某頁面使用 NavigatorTo 跳轉(zhuǎn)至目標頁面時(比如從 index 頁面跳轉(zhuǎn)至 detail 頁面)森瘪,該頁面(index頁面)只執(zhí)行 onHide(), 目標頁面(detail頁面)執(zhí)行 onLoad()牡属、onReady()、onShow()扼睬;
  3. 在回退(NavigatorBack)時(比如從 detail 頁面回退至 index 頁面)逮栅,index頁面執(zhí)行onShow(), detail頁面會被卸載,即執(zhí)行onUnload()窗宇;

3措伐、路由

  • wx.navigateTo, wx.redirectTo 只能打開非 tabBar 頁面。
  • wx.switchTab 只能打開 tabBar 頁面军俊。
  • reLaunch可以打開任意頁面, 但是沒有返回按鈕侥加,需要定義一個可以點擊回退的按鈕。
  • 頁面底部的 tabBar 由頁面決定蝇完,即只要是定義為 tabBar 的頁面官硝,底部都有 tabBar。
  • 調(diào)用頁面路由帶的參數(shù)可以在目標頁面的onLoad中獲取短蜕。
  • 路由傳參
<!-- pages/list/list.wxml -->
<view class="list" >
    <view class='box'  wx:for='{{list}}' wx:key='{{index}}' data-id='{{item.id}}' bindtap='goDetail'>
        <image src='{{item.img}}'></image>
        <view class='tip'>
            <text>{{item.title}}</text>
            <text class='price'>¥{{item.price}}</text>
        </view> 
    </view> 
</view>
//pages/list/list.js
goDetail (e) {
    console.log(e.currentTarget.dataset.id),
    // 進入詳情頁時 傳遞 id
    wx.navigateTo({
        url: `/pages/detail/detail?id=${e.currentTarget.dataset.id}`,
    })
},

// pages/detail/detail.js
Page({
    data: {
        detail: {},
        loading: true
    }, 
    onLoad: function (options) {
        console.log(options.id) // 拿到列表頁傳過來的 id
    }
})

4氢架、布局-flex

/* flex不單是一個屬性,它包含了一套新的屬性集朋魔。屬性集包括用于設(shè)置容器岖研,和用于設(shè)置項目兩部分 */
/* 設(shè)置容器的屬性有: */
display:flex;

flex-direction:row(默認值) | row-reverse | column |column-reverse

flex-wrap:nowrap(默認值) | wrap | wrap-reverse

justify-content:flex-start(默認值) | flex-end | center |space-between | space-around | space-evenly

align-items:stretch(默認值) | center  | flex-end | baseline | flex-start

align-content:stretch(默認值) | flex-start | center |flex-end | space-between | space-around | space-evenly

/* 設(shè)置項目的屬性有 */

order:0(默認值) | <integer>

flex-shrink:1(默認值) | <number>

flex-grow:0(默認值) | <number>

flex-basis:auto(默認值) | <length>

flex:none | auto | @flex-grow @flex-shrink @flex-basis
align-self:auto(默認值) | flex-start | flex-end |center | baseline| stretch

5、數(shù)據(jù)存儲

  • 每個小程序的緩存空間上限為10MB警检,如果當前緩存已經(jīng)達到10MB孙援,再通過wx.setStorage寫入緩存會觸發(fā)fail回調(diào)

6、組件使用

官網(wǎng)自定義組件介紹 | 看到寫的比較詳細的自定義組件

四扇雕、小程序常用功能

  • 上傳圖片:wx.uploadFile
//從本地相冊選擇圖片或使用相機拍照拓售。
wx.chooseImage({
  success (res) {
    const tempFilePaths = res.tempFilePaths
    wx.uploadFile({
      //僅為示例,非真實的接口地址
      url: 'https://example.weixin.qq.com/upload', 
      filePath: tempFilePaths[0],
      name: 'file',
      formData: {
        'user': 'test'
      },
      success (res){
        const data = res.data
        //do something
      }
    })
  }
})

有時候調(diào)用wx.uploadFile會提示“fail url not in domain list”镶奉,是因為沒有勾選“不校驗合法域名础淤、web-view(業(yè)務(wù)域名)崭放、TLS 版本以及 HTTPS 證書”

如果未勾選的話,需要在后臺配置合法域名

  • 更新機制
//放在了app.js的onLaunch方法里了,發(fā)布的第一版不會生效鸽凶,下一版才會生效的
// 獲取小程序更新機制兼容
//wx.canIUse 判斷小程序的API币砂,回調(diào),參數(shù)玻侥,組件等是否在當前版本可用
if (wx.canIUse('getUpdateManager')) {
    const updateManager = wx.getUpdateManager()
    updateManager.onCheckForUpdate(function (res) {
    // 請求完新版本信息的回調(diào)
    if (res.hasUpdate) {
        updateManager.onUpdateReady(function () {
        wx.showModal({
            title: '更新提示',
            content: '新版本已經(jīng)準備好决摧,是否重啟應(yīng)用?',
            success: function (res) {
            if (res.confirm) {
                // 新的版本已經(jīng)下載好凑兰,調(diào)用 applyUpdate 應(yīng)用新版本并重啟
                updateManager.applyUpdate()
            }
            }
        })
        })
        updateManager.onUpdateFailed(function () {
        // 新的版本下載失敗
        wx.showModal({
            title: '已經(jīng)有新版本了喲~',
            content: '新版本已經(jīng)上線啦~掌桩,請您刪除當前小程序,重新搜索打開喲~',
        })
        })
    }
    })
} else {
    // 如果希望用戶在最新版本的客戶端上體驗?zāi)男〕绦蚱币。梢赃@樣子提示
    wx.showModal({
    title: '提示',
    content: '當前微信版本過低拘鞋,無法使用該功能,請升級到最新微信版本后重試矢门。'
    })
}
  • 直接獲取微信頭像
<open-data type="groupName" open-gid="xxxxxx"></open-data>
<open-data type="userAvatarUrl"></open-data>
<open-data type="userGender" lang="zh_CN"></open-data>
  • 微信掃一掃功能
wx.scanCode({
  success: (res) => {
    console.log(res)
  }
})
  • 利用wx.getNetworkType獲取網(wǎng)絡(luò)狀態(tài)
wx.getNetworkType({
    success: function(res) {
        // networkType字段的有效值:
        // wifi/2g/3g/4g/unknown(Android下不常見的網(wǎng)絡(luò)類型)/none(無網(wǎng)絡(luò))
        if (res.networkType == 'wifi') {
            // 從網(wǎng)絡(luò)上下載pdf文檔
            wx.downloadFile({
                url:'http://test.com/somefile.pdf',
                success: function (res) {
                    // 下載成功之后進行預(yù)覽文檔
                    wx.openDocument({filePath: res.tempFilePath})
                }
            })
        } else {
            wx.showToast({ title: '當前為非Wifi環(huán)境' })
        }
    }
})
  • 小程序跳轉(zhuǎn)到其他小程序【最多允許填寫 10 個,需要適應(yīng)跳轉(zhuǎn)小程序的appid】 去官網(wǎng)了解詳情
wx.navigateToMiniProgram({
  appId: '',
  path: 'page/index/index?id=123',
  extraData: {
    foo: 'bar'
  },
  envVersion: 'develop',
  success(res) {
    // 打開成功
  }
})
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市灰蛙,隨后出現(xiàn)的幾起案子祟剔,更是在濱河造成了極大的恐慌,老刑警劉巖摩梧,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件物延,死亡現(xiàn)場離奇詭異,居然都是意外死亡仅父,警方通過查閱死者的電腦和手機叛薯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來笙纤,“玉大人耗溜,你說我怎么就攤上這事∈∪荩” “怎么了抖拴?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長腥椒。 經(jīng)常有香客問我阿宅,道長,這世上最難降的妖魔是什么笼蛛? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任洒放,我火速辦了婚禮,結(jié)果婚禮上滨砍,老公的妹妹穿的比我還像新娘往湿。我一直安慰自己榨为,他們只是感情好,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布煌茴。 她就那樣靜靜地躺著随闺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蔓腐。 梳的紋絲不亂的頭發(fā)上矩乐,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機與錄音回论,去河邊找鬼散罕。 笑死,一個胖子當著我的面吹牛傀蓉,可吹牛的內(nèi)容都是我干的欧漱。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼葬燎,長吁一口氣:“原來是場噩夢啊……” “哼误甚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起谱净,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤窑邦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后壕探,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體冈钦,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年李请,在試婚紗的時候發(fā)現(xiàn)自己被綠了瞧筛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡导盅,死狀恐怖较幌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情认轨,我是刑警寧澤绅络,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站嘁字,受9級特大地震影響恩急,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜纪蜒,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一衷恭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧纯续,春花似錦随珠、人聲如沸灭袁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽茸歧。三九已至,卻和暖如春显沈,著一層夾襖步出監(jiān)牢的瞬間软瞎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工拉讯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留涤浇,地道東北人。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓魔慷,卻偏偏與公主長得像只锭,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子院尔,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

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