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