摘要:本來按照事件順序,小程序初始化時觸發(fā)里的,后面再執(zhí)行頁面里的,但是在里請求獲取是否有權(quán)限,等待返回值的時候里的事件就已經(jīng)執(zhí)行了。頁面判斷一下當(dāng)前是否有值,如果沒有第一次則定義定義一個方法回調(diào)函數(shù)。
本來按照事件順序,小程序初始化時觸發(fā)App里的onLaunch,后面再執(zhí)行頁面Page里的onLoad,但是在onLaunch里請求獲取是否有權(quán)限,等待返回值的時候Page里的onLoad事件就已經(jīng)執(zhí)行了。
//app.js App({ onLaunch: function () { console.log("onLaunch"); wx.request({ url: "test.php", //僅為示例,并非真實的接口地址 data: { }, success: function(res) { console.log("onLaunch-request-success"); // 將employId賦值給全局變量,提供給頁面做判斷 this.globalData.employId = res.employId; } }) }, globalData: { employId: "" } }) //index.js //獲取應(yīng)用實例 const app = getApp() Page({ data: { albumDisabled: true, bindDisabled: false }, onLoad: function () { console.log("onLoad"); console.log("onLoad app.globalData.employId = " + app.globalData.employId); //判斷是用戶是否綁定了 if (app.globalData.employId && app.globalData.employId != "") { this.setData({ albumDisabled: false, bindDisabled: true }); } })
控制臺打印的結(jié)果是
onLaunch onLoad onLoad app.globalData.employId = onLaunch-request-success
要是能等完onLaunch請求完再執(zhí)行Page的onLoad方法那該多好。
這里采用的方法是定義一個回調(diào)函數(shù)。
Page頁面判斷一下當(dāng)前app.globalData.employId是否有值,如果沒有(第一次)則定義定義一個app方法(回調(diào)函數(shù))app.employIdCallback = employId => {...}。
App頁面在請求success后判斷時候有Page頁面定義的回調(diào)方法,如果有就執(zhí)行該方法。因為回調(diào)函數(shù)是在Page里面定義的所以方法作用域this是指向Page頁面。
//app.js App({ onLaunch: function () { wx.request({ url: "test.php", //僅為示例,并非真實的接口地址 data: { }, success: function(res) { this.globalData.employId = res.employId; //由于這里是網(wǎng)絡(luò)請求,可能會在 Page.onLoad 之后才返回 // 所以此處加入 callback 以防止這種情況 if (this.employIdCallback){ this.employIdCallback(employId); } } }) }, globalData: { employId: "" } }) //index.js //獲取應(yīng)用實例 const app = getApp() Page({ data: { albumDisabled: true, bindDisabled: false }, onLoad: function () { //判斷是用戶是否綁定了 if (app.globalData.employId && app.globalData.employId != "") { this.setData({ albumDisabled: false, bindDisabled: true }); } else { // 由于 getUserInfo 是網(wǎng)絡(luò)請求,可能會在 Page.onLoad 之后才返回 // 所以此處加入 callback 以防止這種情況 app.employIdCallback = employId => { if (employId != "") { this.setData({ albumDisabled: false, bindDisabled: true }); } } } } })
這樣的話,就能實現(xiàn)想要的結(jié)果。執(zhí)行順序就是:
[App] onLaunch -> [Page] onLoad -> [App] onLaunch sucess callback
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/93329.html
摘要:運行機(jī)制小程序啟動會有兩種情況,一種是冷啟動,一種是熱啟動。建議小程序在必要時使用監(jiān)聽內(nèi)存告警事件,進(jìn)行必要的內(nèi)存清理。 前言 以小程序為切入點,深入理解總結(jié)方方面面的知識點,做成系列文章,希望能得到大神的指點和幫助新人入門,承上啟下才是好程序猿由于是系列第一篇文章,緊跟著的是一大段廢話,只關(guān)心技術(shù)的可以跳過 轉(zhuǎn)眼半年又要過去了,意味著來新公司快半年了,離上次寫文章也半年了,渾渾噩噩...
摘要:入口文件繼承自組件基類,它同樣擁有組件生命周期,但因為入口文件的特殊性,他的生命周期并不完整,如。支持組件化開發(fā),組件代碼可以放在任意位置,不過建議放在下的目錄中。 生命周期 componentWillMount 在微信小程序中這一生命周期方法對應(yīng)頁面的onLoad或入口文件app中的onLaunch componentDidMount 在微信小程序中這一生命周期方法對應(yīng)頁面的onRe...
摘要:不直接正題一將公共方法綁定到上單個綁定注意公共函數(shù)的名字不要重復(fù),否則覆蓋多個綁定,文件綁定需要綁定的函數(shù)由文件出來二擴(kuò)展,修改生命周期函數(shù)這里必須使用不可以使用箭頭函數(shù),否則指向錯誤擴(kuò)展函數(shù)在是當(dāng)前實例上下文中執(zhí)行,所以當(dāng)前的為當(dāng)前實例如 不BB,直接正題 一. 將公共方法綁定到Page上 單個綁定 const oldPage = Page Page = function(app...
摘要:不直接正題一將公共方法綁定到上單個綁定注意公共函數(shù)的名字不要重復(fù),否則覆蓋多個綁定,文件綁定需要綁定的函數(shù)由文件出來二擴(kuò)展,修改生命周期函數(shù)這里必須使用不可以使用箭頭函數(shù),否則指向錯誤擴(kuò)展函數(shù)在是當(dāng)前實例上下文中執(zhí)行,所以當(dāng)前的為當(dāng)前實例如 不BB,直接正題 一. 將公共方法綁定到Page上 單個綁定 const oldPage = Page Page = function(app...
閱讀 3025·2021-11-22 15:25
閱讀 2343·2021-11-18 10:07
閱讀 1112·2019-08-29 15:29
閱讀 549·2019-08-29 13:25
閱讀 1600·2019-08-29 12:58
閱讀 3279·2019-08-29 12:55
閱讀 2978·2019-08-29 12:28
閱讀 585·2019-08-29 12:16