wxml數(shù)據(jù)綁定胸私,列表渲染厌处,條件渲染

學(xué)習(xí)目標(biāo)

  1. 小程序生命周期
  2. wxml數(shù)據(jù)渲染,列表渲染岁疼, 條件渲染
  3. 組件事件綁定 (bindtap, bindinput)
  4. 修改this.data的值
  5. Page中的頁面事件
  6. 判斷場景值

生命周期

生命周期有程序的生命周期和頁面的生命周期

程序的生命周期

文檔地址:https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/app.html

在程序入口app.js中調(diào)用App(), 而且必須調(diào)用且只能調(diào)用一次阔涉,然后再App()的參數(shù)中可以聲明生命周期函數(shù)

前臺缆娃,后臺的概念

  • 前臺:打開微信就進入小程序前臺
  • 后臺:當(dāng)用戶點擊右上角關(guān)閉,或者按了設(shè)備 Home 鍵離開微信瑰排,此時小程序并沒有直接銷毀贯要,而是進入了后臺;

常用的生命周期:

屬性 描述 觸發(fā)時機
onLaunch 監(jiān)聽小程序初始化 小程序初始化完成時(全局只觸發(fā)一次)
onShow 監(jiān)聽小程序顯示 小程序啟動椭住,或從后臺進入前臺顯示時
onHide 監(jiān)聽小程序隱藏 小程序從前臺進入后臺時

注意:小程序的運行機制

  • 小程序沒有重啟的概念
  • 當(dāng)小程序進入后臺崇渗,客戶端會維持一段時間的運行狀態(tài),超過一定時間后(目前是5分鐘)會被微信主動銷毀

頁面的生命周期

頁面需要通過Page(Object) 函數(shù)用來注冊一個頁面京郑。接受一個 Object 類型參數(shù)宅广,其指定頁面的初始數(shù)據(jù)、生命周期回調(diào)些举、事件處理函數(shù)等跟狱。

文檔地址:https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/page.html

常用的生命周期:

屬性 描述
onLoad 監(jiān)聽頁面加載
onShow 監(jiān)聽頁面顯示
onReady 監(jiān)聽頁面初次渲染完成
onHide 監(jiān)聽頁面隱藏

onLoad
頁面加載時觸發(fā)。一個頁面只會調(diào)用一次户魏,可以在 onLoad 的參數(shù)中獲取打開當(dāng)前頁面路徑中的參數(shù)驶臊。

參數(shù)說明, 通過query獲取當(dāng)前頁面路徑中的參數(shù)

名稱 類型 說明
query Object 打開當(dāng)前頁面路徑中的參數(shù)
注意:頁面需要訪問api接口來初始化頁面, 都可以在onLoad中調(diào)用

總結(jié):

  • 程序的生命周期: app.js中onLaunch在小程序初始化中觸發(fā)
  • 頁面的生命周期: onLoad 只在頁面加載的時候執(zhí)行一次, onShow每次訪問頁面都會執(zhí)行, 通常onLoad在onShow之前執(zhí)行

wxml數(shù)據(jù)綁定绪抛,列表渲染资铡,條件渲染

wxml數(shù)據(jù)綁定

基本概念
WXML 中的動態(tài)數(shù)據(jù)均來自對應(yīng) Page 的 data。

使用方法
數(shù)據(jù)綁定在wxml模板中使用 雙大括號 {{}} 將變量包起來

在組件屬性中綁定數(shù)據(jù)
在組件的屬性中綁定數(shù)據(jù)需要在雙引號中使用大括號

// js
Page({
  data: {
    id: "index"
  }
})

// wxml
<view id="{{id}}"></view>

在組件屬性中綁定布爾值
布爾值關(guān)鍵字,需要在雙引號中使用大括號

<checkbox checked="{{false}}"> </checkbox>
注意:不要直接寫 checked="false"幢码,其計算結(jié)果是一個字符串笤休,轉(zhuǎn)成 boolean 類型后代表真值。

在大括號內(nèi)運算

// 數(shù)字相加
<view>{{1 + 2}}</view>

// 字符串相加
<view>{{"hello" + name}}</view>

列表渲染

重點概念
默認數(shù)組的當(dāng)前項的下標(biāo)變量名默認為 index症副,數(shù)組當(dāng)前項的變量名默認為 item

基本使用

// wxml
<view wx:for="{{array}}">
  {{index}}: {{item.message}}
</view>

// js
Page({
  data: {
    array: [{
      message: 'foo',
    }, {
      message: 'bar'
    }]
  }
})

wx:key的使用
如不提供 wx:key店雅,會報一個 warning,循環(huán)數(shù)組可以把key設(shè)置為下標(biāo)

// wxml
<view wx:for="{{array}}" wx:key="{{index}}">
  {{index}}: {{item.message}}
</view>

for循環(huán)嵌套
當(dāng)for循環(huán)嵌套時候贞铣,會造成indexitem沖突闹啦,這時候需要用到以下兩個屬性:

  • 使用 wx:for-item 可以指定數(shù)組當(dāng)前元素的變量名,
  • 使用 wx:for-index 可以指定數(shù)組當(dāng)前下標(biāo)的變量名

例子:

<view wx:for="{{array}}" wx:for-index="subIndex" wx:for-item="subItem">
  {{subIndex}}: {{subItem.message}}
</view>

條件渲染

基本概念
在框架中辕坝,使用 wx:if="{{condition}}" 來判斷是否需要渲染該代碼塊

<view wx:if="{{condition}}"> True </view>

wx:elif和wx:else
可以用 wx:elif 和 wx:else 來添加一個 else 塊:

<view wx:if="{{length > 5}}"> 1 </view>
<view wx:elif="{{length > 2}}"> 2 </view>
<view wx:else> 3 </view>

總結(jié)

  1. WXML 中的動態(tài)數(shù)據(jù)均來自對應(yīng) Page 的 data
  2. WXML 大括號內(nèi)可以進行運算
  3. wx:for下標(biāo)變量名默認為 index窍奋,數(shù)組當(dāng)前項的默認為 item
  4. wx:for需要加上wx:key, 否則報警告
  5. 無論是數(shù)據(jù)綁定酱畅、循環(huán)渲染和條件渲染琳袄,都必須使用大括號

事件綁定

  • 點擊事件 bindtap
  • 表單input監(jiān)聽輸入事件 bindinput

點擊事件 bindtap

bindtap類似于html的onClick事件

<view bindtap="tabClick"> Click me! </view>

事件對象event
?
Page({
tabClick: function(event) {
console.log(event)
}
})

獲取事件參數(shù)
通過data-*給組件綁定需要的參數(shù),然后再綁定的事件中通過事件對象event.currentTarget.dataset 可以讀取參數(shù)

參考例子:

// wxml
<view bindtap="tabClick" data-name="myName"> Click me! </view>

// js
Page({
  tabClick: function(event) {
    const data = event.currentTarget.dataset;
    console.log(data)
    console.log(data.name)
  }
})

input監(jiān)聽輸入事件 bindinput

bindinput類似于html的oninput事件

bindinput的event事件對象
鍵盤輸入時觸發(fā)纺酸,可以通過訪問event.detail.value獲取input的value
?
// wxml
<input bindinput="bindKeyInput" placeholder="輸入同步到view中"/>

// js
Page({
  bindKeyInput: function(event) {
    console.log(event.detail);
    console.log(event.detail.value);
  },
})
注意: 小程序所有的事件獲取參數(shù)都是上例的bindtap中的一樣窖逗,通過data-*來綁定

總結(jié)

  • bindtap類似于html的onClick事件, 普通的點擊事件
  • bindinput類似于html的oninput事件餐蔬, 可以通過event
  • 獲取input的值

修改page中data的值

使用this.setData修改data的值

基本使用

// wxml
<view>{{text}}</view>
<button bindtap="changeText"> 
    修改 
</button>

// js
Page({
  data: {
    text: '默認的文字',
  },

  changeText: function() {
    // 錯誤使用: this.data.text = '修改后的文字'
    this.setData({
      text: '修改后的文字'
    })
  },
}

this指向問題
注意在某個閉包中使用時候?qū)е聇his沒有指向當(dāng)前的page碎紊,需要先聲明this的變量佑附,供閉包內(nèi)部使用

Page({
    data: {
        text: "默認的文字"
    },
    changeText: function(){
        const that = this;
        setTimeout(function(){
            that.setData({
                text: "修改后的文字"
            })
        },2000)
    }
})

注意:

  • 切記不要使用this.data.* = ""的方式修改data的值,一定要是this.setData
  • 請不要把 data 中屬性的值設(shè)為 undefined

小程序頁面事件

監(jiān)聽用戶下拉刷新事件

文檔的地址: https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/page.html#onShareAppMessage

Page中設(shè)置onPullDownRefresh函數(shù)

Page({
    onPullDownRefresh: function(){
        console.log("下拉刷新")
    }
})
注意:需要在app.json的window選項中或頁面配置中開啟enablePullDownRefresh仗考。

監(jiān)聽用戶上拉觸底事件

文檔的地址: https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/page.html#onShareAppMessage

Page中設(shè)置onReachBottom函數(shù)
?

// wxml 需要高度可以滾動
Page({
    onReachBottom: function(){
        console.log("上拉觸底事件")
    }
})
注意:在觸發(fā)距離內(nèi)滑動期間音同,距離大概是50px以內(nèi),本事件不會再次出發(fā)

頁面分享事件

文檔的地址: https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/page.html#onShareAppMessage

Page中蛇設(shè)置onShareAppMessage函數(shù),
轉(zhuǎn)發(fā)事件由設(shè)置了 open-type="share" 的按鈕來觸發(fā)

此事件需要 return 一個 Object痴鳄,用于自定義轉(zhuǎn)發(fā)內(nèi)容瘟斜,返回內(nèi)容如下:

字段 說明 默認值
title 標(biāo)題 當(dāng)前小程序名稱
path 轉(zhuǎn)發(fā)路徑 當(dāng)前頁面 path 缸夹,必須是以 / 開頭的完整路徑
imageUrl 自定義圖片路徑 使用默認截圖
Page({
  onShareAppMessage: function (res) {
    return {
      title: '自定義轉(zhuǎn)發(fā)標(biāo)題',
      path: '/page/user?id=123'
    }
  }
})
注意:只有定義了此事件處理函數(shù)痪寻,右上角菜單才會顯示“轉(zhuǎn)發(fā)”按鈕

總結(jié):

  • 實現(xiàn)類似微信朋友圈的刷新朋友圈使用onPullDownRefresh
  • 無限滾動加載使用 onReachBottom
  • 右上角菜單才會顯示“轉(zhuǎn)發(fā)”按鈕需要定義onShareAppMessage

判斷場景值

場景值說明:https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/scene.html

在 App 的 onLaunch 和 onShow 中獲取上述場景值

tab頁面的路由管理

程序路由的 Tab 切換,Tab 切換頁面全部出棧虽惭,只留下新的 Tab 頁面

vscode開發(fā)小程序

vsCode中安裝wxml和wxss插件橡类,只需要安裝vscode搜索wxml結(jié)果的前兩項就可以了

第二天內(nèi)容知識點總結(jié):

  1. 能通過微信開發(fā)者工具的“預(yù)覽“功能,在自己手機上預(yù)覽小程序
  2. 掌握小程序的數(shù)據(jù)綁定語法 {{}}
  3. 掌握小程序列表渲染語法 wx:for
  4. 掌握小程序條件渲染語法 wx:if芽唇,wx:else
  5. 掌握小程序事件綁定 bindtap 基本用法
  6. 了解小程序事件傳參 data-* 與 事件對象中 e.currentTarget.dataset 獲取參數(shù)
  7. 了解表單事件 bindinput 與普通事件 bindtap 區(qū)別顾画,bindtap 的事件對象不能獲取表單值
  8. 掌握通過 this.setData() 接口實現(xiàn)數(shù)據(jù)渲染到視圖層
  9. 了解小程序的上拉事件,下拉事件匆笤,分享事件
  10. 了解小程序生命周期函數(shù)研侣,能通過控制臺輸出查看各生命周期函數(shù)的執(zhí)行順序
  11. 能區(qū)別 onLoad 和 onShow 生命周期函數(shù),onLoad 只在加載的時候執(zhí)行一次
  12. 了解小程序場景值的應(yīng)用場景炮捧,通過判斷場景值庶诡,執(zhí)行不同的 console.log
  13. 了解小程序路由的 Tab 切換,Tab 切換頁面全部出棧咆课,只留下新的 Tab 頁面
  14. 使用 VSCode 關(guān)聯(lián) wxml末誓,wxss 文件實現(xiàn)語法高亮提示
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市书蚪,隨后出現(xiàn)的幾起案子喇澡,更是在濱河造成了極大的恐慌,老刑警劉巖殊校,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晴玖,死亡現(xiàn)場離奇詭異,居然都是意外死亡为流,警方通過查閱死者的電腦和手機呕屎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來艺谆,“玉大人榨惰,你說我怎么就攤上這事【蔡溃” “怎么了琅催?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵居凶,是天一觀的道長。 經(jīng)常有香客問我藤抡,道長侠碧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任缠黍,我火速辦了婚禮弄兜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瓷式。我一直安慰自己替饿,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布贸典。 她就那樣靜靜地躺著视卢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪廊驼。 梳的紋絲不亂的頭發(fā)上据过,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天,我揣著相機與錄音妒挎,去河邊找鬼绳锅。 笑死,一個胖子當(dāng)著我的面吹牛酝掩,可吹牛的內(nèi)容都是我干的鳞芙。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼庸队,長吁一口氣:“原來是場噩夢啊……” “哼积蜻!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起彻消,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤竿拆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后宾尚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體丙笋,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年煌贴,在試婚紗的時候發(fā)現(xiàn)自己被綠了御板。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡牛郑,死狀恐怖怠肋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情淹朋,我是刑警寧澤笙各,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布钉答,位于F島的核電站,受9級特大地震影響杈抢,放射性物質(zhì)發(fā)生泄漏数尿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一惶楼、第九天 我趴在偏房一處隱蔽的房頂上張望右蹦。 院中可真熱鬧,春花似錦歼捐、人聲如沸何陆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽甲献。三九已至宰缤,卻和暖如春颂翼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背慨灭。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工朦乏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人氧骤。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓呻疹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親筹陵。 傳聞我的和親對象是個殘疾皇子刽锤,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,697評論 2 351

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