前臺、後臺定義:當用戶點擊左上角關閉,或者按了設備home鍵離開微信,小程序並無直接銷燬,而是進入了後臺;當再次進入微信或再次打開小程序,又會從後臺進入前臺
(6)當使用重定向方法wx.redirectTo(OBJECT)或關閉當前頁返回上一頁wx.navigateBack(),觸發onUnload
4、小程序限制json
4.1 程序限制
(1)js內不能使用window等對象 ps:小程序頁面的邏輯是在jsCode下運行,jsCode是沒有窗口運行環境
(2) zepto/jquerry 會使用到window對象和document對象,因此沒法使用
(3)樣式表不支持級聯選擇器
(4)本地資源沒法經過css獲取 background-image 可使用網絡圖片,或者 base64 ,或者使用標籤
(5)不支持A標籤,沒法打開普通網頁
4.2 數量限制
(1)底部或頂部能夠添加tab按鈕區域tabBar是一個數組,只能配置最少2個、最多5個tab,tab按數組的順序排序
(2)一個應用同時只能打開5個頁面
(3)小程序的wx.request請求最大併發數是10個
4.3 大小限制
(1)tabBar上的按鈕iconPath圖片路徑,icon大小限制爲40kb
(2)tabBar上的按鈕 selectedIconPath 選中時的圖片路徑,icon大小限制也是40kb
(3)setData頁面單次傳遞的數據設置不能超過1024kb
(4)setStorage在本地最大緩存爲10MB
(5)小程序源碼打包後大小限制爲1M
沒登陸騰訊視頻以前 |
點擊登陸會跳轉到當前頁 |
沒登陸發彈幕時 |
會彈出登陸框,登陸時候就能發 |
(2)頁面設置爲tab頁,那麼只支持wx.switchTab,其它兩種接口不支持路由接口訪問(1)微信路由有wx.redirectTo、wx.navigateTo和wx.switchTab接口。其中wx.navigateTo在全局最多調用五次
5.1 在什麼狀況下會觸發頁面跳轉
(1)啓動時,初始化第一個頁面
(2)打開新頁面,當打開新頁面時會調用API wx.navigateTo 或使用 <navigator /> 組件
(3)頁面重定向,會調用API wx.redirectTo 或使用<navigator /> 組件
(4)頁面返回,會調用API wx.navigateBack 或用戶按左上角返回按鈕
(5)tarbar切換
5.2 如何跳轉頁面
(1)使用wx.navigateTo 接口跳轉,原頁面保留
wx.navigateTo({
// 將要跳轉的頁面
url:"pages/logs/index",
success:function(res){},
..
})
(2)使用wx.redirectTo 跳轉,關閉原來的頁面,不能返回
wx.redirectTo({
// 將要跳轉的頁面
url:"pages/logs/index",
success:function(res){},
..
})
(3)點擊返回按鈕時,程序會調用wx.navigateBack接口返回上一頁
wx.navigateBack({
delta:1
})
delta爲1表示返回上頁面,爲2時,表示上上頁,以此類推;若是delta大於已打開頁面的總頁數,則返回首頁,返回首頁以後,原界面會銷燬
(4)使用 navigator 組件跳轉
<navigator url='pages/logs/index' hover-class='navigator-hover'>跳轉</navigator>
當navigator組件添加redirect屬性時,等同於wx.redirectTo接口。默認redirect屬性爲false,等同於navigateTo接口
當頁面跳轉時會傳一個值:url?key=value&key1=value1
5.3 如何正確使用頁面跳轉 ps:官方規定最多五個頁面同時存在,也就是說頁面深度爲5
(1)對於可逆操做:使用 wx.navigateTo ,例:從首頁跳轉到二級頁面,從二級頁面返回是不須要從新渲染首頁
(2)對於不可逆操做(沒法返回上一級頁面):使用wx.redirectTo。例:用戶登陸成功後不須要返回登陸頁面 ps:在首頁不能使用wx.redirctTo
(3)對於介紹性等不經常使用的頁面。推薦使用wx.redirectTo或wx.navigatrBack
5.4 頁面棧
(1)頁面棧以棧(先進後出)的形式維護頁面與頁面的關係
(2)小程序提供了 getCurrentPages() 函數獲取頁面棧,第一個元素爲首頁,最後一個元素爲當前頁面
使用wx.navigateTo每新打開一個頁面,頁面棧大小加1,直到頁面棧大小加到5爲止 (頁面棧最大爲5)
wx.navigateTo和wx.redirctTo的區別以下:
wx.navigateTo重複打開頁面 例:
當使用wx.navigateTo從四級頁面跳轉到二級頁面時,會在頁面棧頂添加一個與二級頁面初始狀態同樣的界面。這兩個頁面時相互獨立的。頁面棧大小會加1,當大於5時,則wx.navigateTo無效
使用wx.redirctTo從四級頁面重定向到二級頁面時,此時會關閉四級頁面,四級頁面會替換成二級頁面,兩個頁面相互獨立,頁面棧大小不會所以而改變
使用wx.navigateBack返回
它們三個的區別:
方法 |
區別 |
wx.navigateTo |
增長頁面棧大小,直至頁面棧爲5時中止跳轉 |
wx.redirectTo |
不會改變頁面棧大小 |
wx.navigateBack |
減小頁面棧大小,直到頁面棧爲1時中止返回 |
使用wx.navigateTo方法跳轉 例:
.wxml文件
<button bindtap='click'>運行</button>
.js文件
page({
click:function(){
wx.navigateTo({
url: '../index/index' //跳轉到index頁面
})
6、數據通訊
setData :把獲取到的信息經過 setData 顯示到頁面上
6.1 頁面之間的通訊
// A頁面-傳遞數據 // 須要注意的是,wx.switchTab 中的 url 不能傳參數。 wx.navigateTo({ url:'../pageD/pageD?name=raymond&gender=male' }) // B頁面-接收數據 經過onLoad的option...
page({
onLoad:function(option){
console.log(option.name + 'is' + option.gender) //raymond is male
this.setData({
option:option
})
}
})
6.2 參數傳遞
6.2.1 小程序傳遞參數的方式
1.App.js中設置全局變量
app.js的Data一般放不會更改的數據,在每一個頁面能夠經過APP實例獲取Data數據
var app = getApp();
var data = app.data;
2.經過拼接URL直接傳遞
wx.navigateTo({})中攜帶參數
wx.navigateTo({
url:'test?id=1'
})
在wxml中使用navigator標籤中攜帶URL參數 例:
<navigator class='test-item' url='pages/logs/index?testId={{testData.testId}}'>跳轉</navigator>
說明:將要傳遞到另外一個頁面的字符串testId的賦值到URL中
在js頁面中使用onLoad方法接收
page({
onLoad:function(options){
var testId = options.testId
console.log(testId)
}
})
navigator跳轉URL傳遞數組
若是一個頁面以數組爲參數進行傳遞,如:相冊列表傳遞到另外一個頁面
<navigator class="test-item" url="../../pages/test/test?testId={{testData.testId}}"></navigator>
在js頁面中onLoad方法接收
page({
data:{
//相冊列表數據
albumList:[]
},
onLoad:function (options) {
var that = this;
that.setData({
albumList:options.albumList.split(",") //albumList爲相冊列表數據
})
}
})
3.在wxml中綁定事件後,經過data-hi="參數"的方式傳遞 ps:若是須要傳遞多個數據,使用data-[參數]的方式進行傳遞
<view bindtap="clickMe" data-testId="{{testId}}">
</view>
在js頁面使用自定義clickMe方式接收
page({
clickMe:function(event){
var testId = event.currentTtarget.dataset.testid;
wx.navigateTo({
url:'../../pages/test/test'
})
}
})
wxml中配置data-albumlist傳遞數組
<view bindtap="clickMe" data-albumlist="{{testData.albumlist}}">
</view>
js代碼
page({
clickMe:function(){
// 打印出來爲字符串,因此還要從新組裝成數組
var albumlist = event.currentTarget.dataset.albumlist.split(","); //albumList爲相冊列表數據
wx.navigateTo({
url:'../../pages/test/test'
})
}
})
4.經過數據緩存存儲再獲取
存儲數據:wx.setStroageSync(KEY,DATA) 獲取數據:wx.setStroageSync(KEY)
//緩存
try {
wx.setStorageSync('key','value')
}catch (e){
}
// 再獲取
try {
var value = wx.getStorageSync('key')
if(value) {
// 返回的值
}
}catch(e){
// 可能出錯的值
}
// 或使用
wx.getStorage({
key:'key',
success:function(res){
console.log(res.data)
}
})