微信小程序

微信小程序

簡(jiǎn)介

騰訊在微信中推出的一種介于 Native AppWeb App 之間的程序

程序中的程序岸夯,生態(tài)中的生態(tài)

開發(fā)工具的下載與使用

下載地址: https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/download.html

工具的使用是比較簡(jiǎn)單的猜扮,可以參照官方提供的文檔https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/debug.html

目錄結(jié)構(gòu)的說明

創(chuàng)建項(xiàng)目的時(shí)候勾選在當(dāng)前目錄中創(chuàng)建 quick start 項(xiàng)目监婶,可以生產(chǎn)一個(gè)基礎(chǔ)的項(xiàng)目,文件結(jié)構(gòu)如下:

pages
    index
        index.js
        inde.json
        inde.wxml
        index.wxss
    logs
        logs.js
        logs.json
        logs.wxml
        logs.wxss
utils
    util.js
app.js
app.json
app.wxss

結(jié)構(gòu)解釋說明

  • pages 小程序中所有的頁(yè)面都會(huì)存在此文件夾下鲜漩,每個(gè)頁(yè)面都以一個(gè)文件夾的形式存在集惋,里面文件分為四種
  • index/index.js index頁(yè)面的邏輯代碼
  • index/inde.json index頁(yè)面的數(shù)據(jù)代碼
  • Index/index.wxml index頁(yè)面的結(jié)構(gòu)代碼
  • index/index.wxss index頁(yè)面的樣式代碼
  • utils 一些工具類,放在此文件夾下
  • app.js 小程序主文件喉祭,配置app相關(guān)的信息。整個(gè)app的生命周期方法也在此文件中
  • app.json 配置整個(gè)程序相關(guān)信息泛烙。例如:主題顏色翘紊,tabbar如何切換等等
  • app.wxss 配置整個(gè)微信小程序的全局樣式,可以認(rèn)為是所有頁(yè)面的根樣式

特殊文件格式說明

在微信小程序中,不是直接使用HTML和CSS進(jìn)行頁(yè)面的編寫宇立,而是進(jìn)行了一定的升級(jí)

*.wxml代表小程序中頁(yè)面的結(jié)構(gòu)文件自赔,*.wxss代表小程序中頁(yè)面的樣式文件,每個(gè)頁(yè)面都應(yīng)該有這兩個(gè)同名文件

index.wxml

在wxml文件中绍妨,可以發(fā)現(xiàn),不再是html中的div他去、img、span等標(biāo)簽尔苦,而是使用了view行施、image、text等標(biāo)簽

  • view === div
  • image === img
  • text === p

wxml中的標(biāo)簽和HTML中的標(biāo)簽作用一致蛾号,只是要求這么編寫而已

<!--index.wxml-->
<view class="container">
    <view  bindtap="bindViewTap" class="userinfo">
        <image class="userinfo-avatar" src="{{userInfo.avatarUrl}}" background-size="cover"></image>
        <text class="userinfo-nickname">{{userInfo.nickName}}</text>
    </view>
    <view class="usermotto">
        <text class="user-motto">{{motto}}</text>
    </view>
</view>

index.wxss

wxss和css變化到不是很大涯雅,除了新增一個(gè)單位 rpx以外,其它基本一致

rpx是小程序中的長(zhǎng)度單位活逆,好處就是會(huì)跟著屏幕變化而變化

如果在iPhone6上,屏幕寬度為375px怒允,共有750個(gè)物理像素,則750rpx = 375px = 750物理像素锈遥,即1rpx = 0.5px

換算規(guī)則如下:

設(shè)備 rpx => px px => rpx
iPhone 5 1rpx = 0.42px 1px = 2.34rpx
iPhone 6 1rpx = 0.5px 1px = 2rpx
iPhone 6 Plus 1rpx = 0.552px 1px = 1.81rpx

注意:開發(fā)微信小程序時(shí)設(shè)計(jì)師可以用 iPhone6 作為視覺稿的標(biāo)準(zhǔn),單位換算相對(duì)簡(jiǎn)單

/**index.wxss**/
.userinfo {
    display: flex;
    flex-direction: column;
    align-items: center;
}

.userinfo-avatar {
    width: 128rpx;
    height: 128rpx;
    margin: 20rpx;
    border-radius: 50%;
}

.userinfo-nickname {
    color: #aaa;
}

.usermotto {
    margin-top: 200px;
}

更換項(xiàng)目首頁(yè)所灸、動(dòng)態(tài)數(shù)據(jù)、事件綁定

創(chuàng)建的項(xiàng)目中爬立,有個(gè)默認(rèn)的首頁(yè),我們把它換掉知纷,換成垂直和水平居中的一個(gè)大文字

  1. app.json文件中添加新頁(yè)面
    app.json文件中有個(gè)pages的位置,里面放置的小程序頁(yè)面的路徑琅轧。
    在小程序中,所有的頁(yè)面乍桂,都需要在app.json的pages中進(jìn)行注冊(cè)。
    為了提高開發(fā)效率权谁,沒必要分別創(chuàng)建home.js憋沿、home.jsonhome.wxml辐啄、home.wxss這些文件,只需要修改app.jsonpages后面的內(nèi)容即可

    {
      "pages":[
        "pages/home/home",
        "pages/index/index",
        "pages/logs/logs"
      ]
    }
    

    pages對(duì)應(yīng)的是一個(gè)數(shù)組壶辜,在第一個(gè)位置添加"pages/home/home",意為在pages文件夾下創(chuàng)建home文件夾抵怎,后面的home代表文件夾中所有文件的名稱

    ?

    注意: 路徑的位置很重要,小程序會(huì)認(rèn)為在pages對(duì)應(yīng)的數(shù)組中第一個(gè)元素的路徑為首頁(yè)

  2. 添加結(jié)構(gòu)
    打開pages/home/home.wxml文件反惕,修改里面的代碼為如下:

    <view class="home">
        <text>HOME PAGE</text>
    </view>
    
  3. 添加樣式
    打開pages/home/home.wxss文件演侯,修改里面的代碼如下:

    /* pages/home/home.wxss */
    .home {
        height: 100%;
        height: 100%;
        display: flex;
        justify-content: center;
        flex-wrap: wrap;
        align-items: center;
        background-color: #333;
    }
    .home text {
        font-size: 100rpx;
        color: white;
        font-weight: bold;
    }
    

    把頁(yè)面設(shè)置高度為100%,然后彈性布局蚌本,讓內(nèi)容居中,發(fā)現(xiàn)頁(yè)面并沒有居中程癌,還需要添加另外一段代碼
    打開app.wxss文件,在最上面添加如下代碼:

    page {
        height: 100%;
    }
    

    因?yàn)樵谛〕绦虻木W(wǎng)頁(yè)中进萄,最外層的標(biāo)簽是page,然后內(nèi)部才是home.wxml中的內(nèi)容可婶,所以想要讓home.wxml中的view高度和屏幕一致,即需要先設(shè)置page高度和屏幕一致

  4. 頁(yè)面效果如下


  5. 把頁(yè)面數(shù)據(jù)改為動(dòng)態(tài)數(shù)據(jù)
    頁(yè)面中的HOME PAGE文字為寫死的矛渴,改為動(dòng)態(tài)數(shù)據(jù)惫搏,方便后續(xù)更改
    把數(shù)據(jù)放在home.js文件中,然后渲染到頁(yè)面上
    打開pages/home/home.js文件筐赔,自動(dòng)生成了相關(guān)生命周期方法,找到data达皿,添加數(shù)據(jù)

    data: {
        title: 'HOME PAGE'
    }
    

    打開pages/home/home.wxml文件贿肩,修改代碼如下:

    <view class="home">
        <text>{{ title }}</text>
    </view>
    

    使用{{ }}作為表達(dá)式,內(nèi)部直接寫變量尸曼,就可以進(jìn)行變量的解析(和AngularJS萄焦、VueJS的表達(dá)式是一樣的)

  6. 查看頁(yè)面效果和網(wǎng)頁(yè)中是完全一樣的

  7. 添加行為 在頁(yè)面中添加一個(gè)按鈕,然后點(diǎn)擊彈框顯示
    打開pages/home/home.js文件拂封,在data后面添加事件

    data: {
        title: 'HOME PAGE'
    },
    showInfo() { // 注意,添加的方法和data是同級(jí)的
        wx.showModal({
            title: '標(biāo)題',
            content: '內(nèi)容',
            success: function(res) {
                console.log('點(diǎn)擊了確定的回調(diào)')
            },
            fail: function(res) {
                console.log('點(diǎn)擊了取消的回調(diào)')
            },
            complete: function(res) {
                console.log('無論點(diǎn)擊確定還是取消在抛,都會(huì)執(zhí)行的回調(diào)')
            }
        })
    }
    

    打開pages/home/home.wxml文件,添加代碼和綁定事件

    <view class="home">
        <text>{{ title }}</text>
        <button bindtap="showInfo">彈框顯示</button>
    </view>
    

    頁(yè)面效果如下:

  8. 添加新事件刚梭,修改數(shù)據(jù)
    打開pages/home/home.js文件票唆,添加事件,目的是修改數(shù)據(jù)衅金,改變頁(yè)面

    changeTitle() {
        // 修改數(shù)據(jù)
        this.setData({
          title: 'home page'
        })
    },
    

    打開pages/home/home.wxml文件,添加button,并綁定按鈕

    <button bindtap="changeTitle">修改文件</button>
    

    頁(yè)面效果


    點(diǎn)擊修改文字按鈕鉴吹,上面的文字就會(huì)更新

修改整個(gè)小程序的樣式

app.json是對(duì)整個(gè)小程序的全局配置

可以在這個(gè)文件中配置小程序是由哪些頁(yè)面組成惩琉,配置小程序的窗口?背景色,配置導(dǎo)航條樣式瞒渠,配置默認(rèn)標(biāo)題。注意該文件不可添加任何注釋

更多可配置項(xiàng)可參考配置詳解

{
  "pages":[
    "pages/home/home",
    "pages/index/index",
    "pages/logs/logs"
  ],
  "window":{
    "backgroundTextStyle":"light",
    "navigationBarBackgroundColor": "#fff",
    "navigationBarTitleText": "微信  小程序",
    "navigationBarTextStyle":"black"
  },
  "tabBar": {
    "list": [{
      "pagePath": "pages/home/home",
      "text": "home",
      "iconPath": "imgs/icon.png",
      "selectedIconPath": "imgs/icon_selected.png"
    },{
      "pagePath": "pages/index/index",
      "text": "index",
      "iconPath": "imgs/icon.png",
      "selectedIconPath": "imgs/icon_selected.png"
    },{
      "pagePath": "pages/logs/logs",
      "text": "logs",
      "iconPath": "imgs/icon.png",
      "selectedIconPath": "imgs/icon_selected.png"
    }]
  },
  "networkTimeout": {
    "request": 20000,
    "connectSocket": 20000,
    "uploadFile": 20000,
    "downloadFile": 20000
  }
}

pages

接受一個(gè)數(shù)組诚啃,每一項(xiàng)都是字符串私沮,來指定小程序由哪些頁(yè)面組成

每一項(xiàng)代表對(duì)應(yīng)頁(yè)面的【路徑+文件名】信息

數(shù)組的第一項(xiàng)代表小程序的初始頁(yè)面。小程序中新增/減少頁(yè)面造垛,都需要對(duì) pages 數(shù)組進(jìn)行修改

文件名不需要寫文件后綴,因?yàn)榭蚣軙?huì)自動(dòng)去尋找路徑.json,.js,.wxml,.wxss的四個(gè)文件進(jìn)行整合

window

用于設(shè)置小程序的狀態(tài)欄五辽、導(dǎo)航條、標(biāo)題杆逗、窗口背景色

tabBar

如果我們的小程序是一個(gè)多 tab 應(yīng)用(客戶端窗口的底部或頂部有 tab 欄可以切換頁(yè)面)鳞疲,那么我們可以通過 tabBar 配置項(xiàng)指定 tab 欄的表現(xiàn),以及 tab 切換時(shí)顯示的對(duì)應(yīng)頁(yè)面

  • 當(dāng)設(shè)置 position 為 top 時(shí)悔橄,將不會(huì)顯示 icon
  • tabBar 是一個(gè)數(shù)組腺毫,只能配置最少2個(gè)癣疟、最多5個(gè) tab睛挚,tab 按數(shù)組的順序排序

networkTimeout

可以設(shè)置各種網(wǎng)絡(luò)請(qǐng)求的超時(shí)時(shí)間

修改單個(gè)頁(yè)面相關(guān)信息

除了app.json以外澈灼,每個(gè)頁(yè)面也都有自己的*.json文件店溢,可以設(shè)置相關(guān)信息委乌,只對(duì)當(dāng)前頁(yè)面有效

頁(yè)面的配置比app.json全局配置簡(jiǎn)單得多,只是設(shè)置app.json中的 window配置項(xiàng)的內(nèi)容遭贸,頁(yè)面中配置項(xiàng)會(huì)覆蓋 app.jsonwindow中相同的配置項(xiàng)戈咳。

{
  "navigationBarBackgroundColor": "#000",
  "navigationBarTextStyle": "light",
  "navigationBarTitleText": "導(dǎo)航欄標(biāo)題文字",
  "backgroundColor": "#fff",
  "backgroundTextStyle": "light"
}

小程序主文件 app.js

app.js文件中著蛙,App() 函數(shù)用來注冊(cè)一個(gè)小程序

接受一個(gè) object 參數(shù)耳贬,其指定小程序的生命周期函數(shù)等

App({
    onLaunch: function(options) {
        // 當(dāng)小程序初始化完成時(shí),會(huì)觸發(fā) onLaunch(全局只觸發(fā)一次)
        // Do something initial when launch.
    },
    onShow: function(options) {
        // 當(dāng)小程序啟動(dòng)顷蟆,或從后臺(tái)進(jìn)入前臺(tái)顯示,會(huì)觸發(fā) onShow
        // Do something when show.
    },
    onHide: function() {
        // 當(dāng)小程序從前臺(tái)進(jìn)入后臺(tái)帐偎,會(huì)觸發(fā) onHide
        // Do something when hide.
    },
    onError: function(msg) {
        // 當(dāng)小程序發(fā)生腳本錯(cuò)誤蛔屹,或者 api 調(diào)用失敗時(shí),會(huì)觸發(fā) onError 并帶上錯(cuò)誤信息
        console.log(msg)
    },
    globalData: { // 全局的數(shù)據(jù)兔毒,在任何頁(yè)面中都可以訪問到
      info: 'I am global data'
    }
})

在子頁(yè)面中可以獲取代表小程序的App對(duì)象:

// 直接調(diào)用getApp()函數(shù)
let app = getApp()
// 可以從app中訪問全局?jǐn)?shù)據(jù),可讀可寫
console.log(app.globalData.info)

注意:

  • App() 必須在 app.js 中注冊(cè)绕辖,且不能注冊(cè)多個(gè)
  • 不要在定義于 App() 內(nèi)的函數(shù)中調(diào)用 getApp() 擂红,使用 this 就可以拿到 app 實(shí)例
  • 不要在 onLaunch 的時(shí)候調(diào)用 getCurrentPages()围小,此時(shí) page 還沒有生成
  • 通過 getApp() 獲取實(shí)例之后昵骤,不要私自調(diào)用生命周期函數(shù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末变秦,一起剝皮案震驚了整個(gè)濱河市框舔,隨后出現(xiàn)的幾起案子赎婚,更是在濱河造成了極大的恐慌樱溉,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撩嚼,死亡現(xiàn)場(chǎng)離奇詭異挖帘,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)逻族,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門瓷耙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人搁痛,你說我怎么就攤上這事〖Φ洌” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵彻况,是天一觀的道長(zhǎng)舅踪。 經(jīng)常有香客問我,道長(zhǎng)悍赢,這世上最難降的妖魔是什么货徙? 我笑而不...
    開封第一講書人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮痴颊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蠢棱。我一直安慰自己锌杀,他們只是感情好甩栈,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著糕再,像睡著了一般谤职。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上亿鲜,一...
    開封第一講書人閱讀 51,115評(píng)論 1 296
  • 那天允蜈,我揣著相機(jī)與錄音,去河邊找鬼蒿柳。 笑死饶套,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的垒探。 我是一名探鬼主播妓蛮,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼圾叼!你這毒婦竟也來了蛤克?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤夷蚊,失蹤者是張志新(化名)和其女友劉穎构挤,沒想到半個(gè)月后筋现,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體矾飞,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡洒沦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了豺型。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡剪验,死狀恐怖功戚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情届宠,我是刑警寧澤豌注,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站齿风,受9級(jí)特大地震影響救斑,放射性物質(zhì)發(fā)生泄漏系谐。R本人自食惡果不足惜纪他,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一茶袒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧向叉,春花似錦母谎、人聲如沸奇唤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)画侣。三九已至胎源,卻和暖如春涕蚤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背佑钾。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來泰國(guó)打工扰她, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留徒役,地道東北人杉女。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓熏挎,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親廉白。 傳聞我的和親對(duì)象是個(gè)殘疾皇子猴蹂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

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