W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
Page
代表應用的一個頁面,負責頁面展示和交互。每個頁面對應一個子目錄,一般有多少個頁面,就有多少個子目錄。它也是一個構(gòu)造函數(shù),用來生成頁面實例。
頁面初始化時,需要提供數(shù)據(jù)將作為頁面的第一次渲染。
<view>{{title}}</view>
<view>{{array[0].user}}</view>
Page({
data: {
title: 'Alipay',
array: [{user: 'li'}, {user: 'zhao'}]
}
})
定義交互行為時,需要在頁面腳本里面指定響應函數(shù)。
<view onTap="handleTap">click me</view>
上面模板定義用戶點擊時,調(diào)用handleTap
方法。
Page({
handleTap() {
console.log('yo! view tap!')
}
})
頁面重新渲染,需要在頁面腳本里面調(diào)用this.setData
方法。
<view>{{text}}</view>
<button onTap="changeText"> Change normal data </button>
上面代碼指定用戶觸摸按鈕時,調(diào)用changeText
方法。
Page({
data: {
text: 'init data',
},
changeText() {
this.setData({
text: 'changed data'
})
},
})
上面代碼中,changeText
方法里面調(diào)用this.setData
方法,會導致頁面的重新渲染。
Page()
接受一個 object
作為參數(shù),該參數(shù)用來指定頁面的初始數(shù)據(jù)、生命周期函數(shù)、事件處理函數(shù)等。
//index.js
Page({
data: {
title: "Alipay"
},
onLoad(query) {
// 頁面加載
},
onReady() {
// 頁面加載完成
},
onShow() {
// 頁面顯示
},
onHide() {
// 頁面隱藏
},
onUnload() {
// 頁面被關閉
},
onTitleClick() {
// 標題被點擊
},
onPullDownRefresh() {
// 頁面被下拉
},
onReachBottom() {
// 頁面被拉到底部
},
onShareAppMessage() {
// 返回自定義分享信息
},
viewTap() {
// 事件處理
this.setData({
text: 'Set data for updat.'
})
},
go() {
// 帶參數(shù)的跳轉(zhuǎn),從 page/index 的 onLoad 函數(shù)的 query 中讀取 xx
my.navigateTo('/page/index?xx=1')
},
customData: {
hi: 'alipay'
}
})
上面代碼中,Page()
方法的參數(shù)對象說明如下。
屬性 | 類型 | 描述 |
---|---|---|
data | Object or Function | 初始數(shù)據(jù)或返回初始化數(shù)據(jù)的函數(shù) |
onTitleClick | Function | 點擊標題觸發(fā) |
onOptionMenuClick | Function | 基礎庫 1.3.0+ 支持,點擊格外導航欄圖標觸發(fā) |
onPageScroll | Function({scrollTop}) | 頁面滾動時觸發(fā) |
onLoad | Function(query: Object) | 頁面加載時觸發(fā) |
onReady | Function | 頁面初次渲染完成時觸發(fā) |
onShow | Function | 頁面顯示時觸發(fā) |
onHide | Function | 頁面隱藏時觸發(fā) |
onUnload | Function | 頁面卸載時觸發(fā) |
onPullDownRefresh | Function | 頁面下拉時觸發(fā) |
onReachBottom | Function | 上拉觸底時觸發(fā) |
onShareAppMessage | Function | 點擊右上角分享時觸發(fā) |
其他 | Any | 開發(fā)者可以添加任意的函數(shù)或?qū)傩缘?nbsp;object 參數(shù)中,在頁面的函數(shù)中可以用 this 來訪問 |
(1)生命周期方法的說明
my.navigateTo
和 my.redirectTo
中傳遞的 query
對象。my.setNavigationBarTitle
請在onReady
之后設置,詳見生命周期。navigateTo
或底部tab
切換時調(diào)用。redirectTo
或navigateBack
的時候調(diào)用。(2)事件處理函數(shù)的說明
app.json
的window
選項中開啟pullRefresh
,當處理完數(shù)據(jù)刷新后,my.stopPullDownRefresh
可以停止當前頁面的下拉刷新。
setData
函數(shù)用于將數(shù)據(jù)從邏輯層發(fā)送到視圖層,同時改變對應的this.data
的值。
注意:
this.data
無效,無法改變頁面的狀態(tài),還會造成數(shù)據(jù)不一致。
setData
接受一個對象作為參數(shù)。對象的鍵名key
可以非常靈活,以數(shù)據(jù)路徑的形式給出,如 array[2].message
、a.b.c.d
,并且不需要在this.data
中預先定義。
下面是示例代碼。
<view>{{text}}</view>
<button onTap="changeTitle"> Change normal data </button>
<view>{{array[0].text}}</view>
<button onTap="changeArray"> Change Array data </button>
<view>{{object.text}}</view>
<button onTap="changePlanetColor"> Change Object data </button>
<view>{{newField.text}}</view>
<button onTap="addNewKey"> Add new data </button>
Page({
data: {
text: 'test',
array: [{text: 'a'}],
object: {
text: 'blue'
}
},
changeTitle() {
// 錯誤!不要直接去修改 data 里的數(shù)據(jù)
// this.data.text = 'changed data'
// 正確
this.setData({
text: 'ha'
})
},
changeArray() {
// 可以直接使用數(shù)據(jù)路徑來修改數(shù)據(jù)
this.setData({
'array[0].text':'b'
})
},
changePlanetColor(){
this.setData({
'object.text': 'red'
});
},
addNewKey() {
this.setData({
'newField.text': 'c'
})
}
})
getCurrentPages()
函數(shù)用于獲取當前頁面棧的實例,以數(shù)組形式按棧的順序給出,第一個元素為首頁,最后一個元素為當前頁面。下面代碼可以用于檢測當前頁面棧是否具有5層頁面深度。
if(getCurrentPages().length === 5) {
my.redirectTo('/xx');
} else {
my.navigateTo('/xx');
}
注意:不要嘗試修改頁面棧,會導致路由以及頁面狀態(tài)錯誤。
框架以棧的形式維護了當前的所有頁面。 當發(fā)生路由切換的時候,頁面棧的表現(xiàn)如下:
路由方式 | 頁面棧表現(xiàn) |
---|---|
初始化 | 新頁面入棧 |
打開新頁面 | 新頁面入棧 |
頁面重定向 | 當前頁面出棧,新頁面入棧 |
頁面返回 | 當前頁面出棧 |
Tab 切換 | 頁面全部出棧,只留下新的 Tab 頁面 |
每一個頁面也可以使用[page名].json
文件來對本頁面的窗口表現(xiàn)進行配置。
頁面的配置比app.json
全局配置簡單得多,只能設置window
相關的配置項,所以無需寫window
這個鍵。注意,頁面配置會覆蓋app.json
的window
屬性中的配置項。
每個頁面中的根元素為 page,需要設置高度或者背景色時,可以利用這個元素。
page {
background-color: #fff;
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: