微信小程序

微信小程序

簡介

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

程序中的程序,生態中的生態

開發工具的下載與使用

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

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

目錄結構的說明

創建項目的時候勾選在當前目錄中創建 quick start 項目,可以生產一個基礎的項目,文件結構如下:

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

結構解釋說明

  • pages 小程序中所有的頁面都會存在此文件夾下,每個頁面都以一個文件夾的形式存在,里面文件分為四種
  • index/index.js index頁面的邏輯代碼
  • index/inde.json index頁面的數據代碼
  • Index/index.wxml index頁面的結構代碼
  • index/index.wxss index頁面的樣式代碼
  • utils 一些工具類,放在此文件夾下
  • app.js 小程序主文件,配置app相關的信息。整個app的生命周期方法也在此文件中
  • app.json 配置整個程序相關信息。例如:主題顏色,tabbar如何切換等等
  • app.wxss 配置整個微信小程序的全局樣式,可以認為是所有頁面的根樣式

特殊文件格式說明

在微信小程序中,不是直接使用HTML和CSS進行頁面的編寫,而是進行了一定的升級

*.wxml代表小程序中頁面的結構文件,*.wxss代表小程序中頁面的樣式文件,每個頁面都應該有這兩個同名文件

index.wxml

在wxml文件中,可以發現,不再是html中的div、img、span等標簽,而是使用了view、image、text等標簽

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

wxml中的標簽和HTML中的標簽作用一致,只是要求這么編寫而已

<!--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變化到不是很大,除了新增一個單位 rpx以外,其它基本一致

rpx是小程序中的長度單位,好處就是會跟著屏幕變化而變化

如果在iPhone6上,屏幕寬度為375px,共有750個物理像素,則750rpx = 375px = 750物理像素,即1rpx = 0.5px

換算規則如下:

設備 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

注意:開發微信小程序時設計師可以用 iPhone6 作為視覺稿的標準,單位換算相對簡單

/**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;
}

更換項目首頁、動態數據、事件綁定

創建的項目中,有個默認的首頁,我們把它換掉,換成垂直和水平居中的一個大文字

  1. app.json文件中添加新頁面
    app.json文件中有個pages的位置,里面放置的小程序頁面的路徑。
    在小程序中,所有的頁面,都需要在app.json的pages中進行注冊。
    為了提高開發效率,沒必要分別創建home.jshome.jsonhome.wxmlhome.wxss這些文件,只需要修改app.jsonpages后面的內容即可

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

    pages對應的是一個數組,在第一個位置添加"pages/home/home",意為在pages文件夾下創建home文件夾,后面的home代表文件夾中所有文件的名稱

    ?

    注意: 路徑的位置很重要,小程序會認為在pages對應的數組中第一個元素的路徑為首頁

  2. 添加結構
    打開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;
    }
    

    把頁面設置高度為100%,然后彈性布局,讓內容居中,發現頁面并沒有居中,還需要添加另外一段代碼
    打開app.wxss文件,在最上面添加如下代碼:

    page {
        height: 100%;
    }
    

    因為在小程序的網頁中,最外層的標簽是page,然后內部才是home.wxml中的內容,所以想要讓home.wxml中的view高度和屏幕一致,即需要先設置page高度和屏幕一致

  4. 頁面效果如下


  5. 把頁面數據改為動態數據
    頁面中的HOME PAGE文字為寫死的,改為動態數據,方便后續更改
    把數據放在home.js文件中,然后渲染到頁面上
    打開pages/home/home.js文件,自動生成了相關生命周期方法,找到data,添加數據

    data: {
        title: 'HOME PAGE'
    }
    

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

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

    使用{{ }}作為表達式,內部直接寫變量,就可以進行變量的解析(和AngularJS、VueJS的表達式是一樣的)

  6. 查看頁面效果和網頁中是完全一樣的

  7. 添加行為 在頁面中添加一個按鈕,然后點擊彈框顯示
    打開pages/home/home.js文件,在data后面添加事件

    data: {
        title: 'HOME PAGE'
    },
    showInfo() { // 注意,添加的方法和data是同級的
        wx.showModal({
            title: '標題',
            content: '內容',
            success: function(res) {
                console.log('點擊了確定的回調')
            },
            fail: function(res) {
                console.log('點擊了取消的回調')
            },
            complete: function(res) {
                console.log('無論點擊確定還是取消,都會執行的回調')
            }
        })
    }
    

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

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

    頁面效果如下:

  8. 添加新事件,修改數據
    打開pages/home/home.js文件,添加事件,目的是修改數據,改變頁面

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

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

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

    頁面效果


    點擊修改文字按鈕,上面的文字就會更新

修改整個小程序的樣式

app.json是對整個小程序的全局配置

可以在這個文件中配置小程序是由哪些頁面組成,配置小程序的窗口?背景色,配置導航條樣式,配置默認標題。注意該文件不可添加任何注釋

更多可配置項可參考配置詳解

{
  "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

接受一個數組,每一項都是字符串,來指定小程序由哪些頁面組成

每一項代表對應頁面的【路徑+文件名】信息

數組的第一項代表小程序的初始頁面。小程序中新增/減少頁面,都需要對 pages 數組進行修改

文件名不需要寫文件后綴,因為框架會自動去尋找路徑.json,.js,.wxml,.wxss的四個文件進行整合

window

用于設置小程序的狀態欄、導航條、標題、窗口背景色

tabBar

如果我們的小程序是一個多 tab 應用(客戶端窗口的底部或頂部有 tab 欄可以切換頁面),那么我們可以通過 tabBar 配置項指定 tab 欄的表現,以及 tab 切換時顯示的對應頁面

  • 當設置 position 為 top 時,將不會顯示 icon
  • tabBar 是一個數組,只能配置最少2個、最多5個 tab,tab 按數組的順序排序

networkTimeout

可以設置各種網絡請求的超時時間

修改單個頁面相關信息

除了app.json以外,每個頁面也都有自己的*.json文件,可以設置相關信息,只對當前頁面有效

頁面的配置比app.json全局配置簡單得多,只是設置app.json中的 window配置項的內容,頁面中配置項會覆蓋 app.jsonwindow中相同的配置項。

{
  "navigationBarBackgroundColor": "#000",
  "navigationBarTextStyle": "light",
  "navigationBarTitleText": "導航欄標題文字",
  "backgroundColor": "#fff",
  "backgroundTextStyle": "light"
}

小程序主文件 app.js

app.js文件中,App() 函數用來注冊一個小程序

接受一個 object 參數,其指定小程序的生命周期函數等

App({
    onLaunch: function(options) {
        // 當小程序初始化完成時,會觸發 onLaunch(全局只觸發一次)
        // Do something initial when launch.
    },
    onShow: function(options) {
        // 當小程序啟動,或從后臺進入前臺顯示,會觸發 onShow
        // Do something when show.
    },
    onHide: function() {
        // 當小程序從前臺進入后臺,會觸發 onHide
        // Do something when hide.
    },
    onError: function(msg) {
        // 當小程序發生腳本錯誤,或者 api 調用失敗時,會觸發 onError 并帶上錯誤信息
        console.log(msg)
    },
    globalData: { // 全局的數據,在任何頁面中都可以訪問到
      info: 'I am global data'
    }
})

在子頁面中可以獲取代表小程序的App對象:

// 直接調用getApp()函數
let app = getApp()
// 可以從app中訪問全局數據,可讀可寫
console.log(app.globalData.info)

注意:

  • App() 必須在 app.js 中注冊,且不能注冊多個
  • 不要在定義于 App() 內的函數中調用 getApp() ,使用 this 就可以拿到 app 實例
  • 不要在 onLaunch 的時候調用 getCurrentPages(),此時 page 還沒有生成
  • 通過 getApp() 獲取實例之后,不要私自調用生命周期函數
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,428評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,024評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,285評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,548評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,328評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,878評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,971評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,098評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,616評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,554評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,725評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,243評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,971評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,361評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,613評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,339評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,695評論 2 370

推薦閱讀更多精彩內容