這篇文章主要介紹“開(kāi)發(fā)微信小程序?qū)嵗治觥钡南嚓P(guān)知識(shí),小編通過(guò)實(shí)際案例向大家展示操作過(guò)程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“開(kāi)發(fā)微信小程序?qū)嵗治觥蔽恼履軒椭蠹医鉀Q問(wèn)題。
成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供雙臺(tái)子網(wǎng)站建設(shè)、雙臺(tái)子做網(wǎng)站、雙臺(tái)子網(wǎng)站設(shè)計(jì)、雙臺(tái)子網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、雙臺(tái)子企業(yè)網(wǎng)站模板建站服務(wù),10余年雙臺(tái)子做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。總結(jié)
1:傳參,方法判斷
js中 方法中可以傳遞一個(gè)方法作為形參,在java中是不可以的。比如start項(xiàng)目中的
getUserInfo:function(cb){ var that = this if(this.globalData.userInfo){ typeof cb == "function" && cb(this.globalData.userInfo) }else{ //調(diào)用登錄接口 wx.login({ success: function () { wx.getUserInfo({ success: function (res) { that.globalData.userInfo = res.userInfo typeof cb == "function" && cb(that.globalData.userInfo) } }) } }) } },
這里就是傳遞一個(gè)形參,cb的方法,并且這里還有一個(gè)很巧妙的判斷方法
typeof cb == "function" && cb(that.globalData.userInfo)
利用的&&的運(yùn)算規(guī)律,首先判斷cb是不是一個(gè)方法, 這里的==可以作為類(lèi)型是否相當(dāng)?shù)呐袛?,然后?&中如果前面的不滿足,后面的則不會(huì)執(zhí)行;如果是cb是一個(gè)方法,調(diào)用cb方法,并且傳入success成功回調(diào)的userinfo參數(shù)
還有一點(diǎn),if(this.globalData.userInfo) 可以作為是否為null的判斷條件,在java中不可以。
2:log打印
log的打印,如果直接打印“”+變量 是不可以的,因?yàn)槿思覜](méi)有toString()方法
X console.log("info"+info);
所以只能分開(kāi)打印
console.log("info"); console.log(info);
3: json取對(duì)象
json的使用,可以通過(guò) json["key"]來(lái)取其子對(duì)象
person: { name: "jafir", age: "11", } var name = person["name"]; var age = person["age"];
info: {persons:[{name:"123",age:11},{name:"jafir1",age:12}]} //如果有數(shù)組 通過(guò)這種方法獲取 console.log(that.data.info["persons"][1].name) console.log(that.data.info["persons"][1].age)
4:定義boolean類(lèi)型值
要注意如果在page的data中要定義一個(gè)boolean類(lèi)型的值,必須是 isSuccess : true而不是 isSuccess :"true"
if (this.data.isSccess) { console.log("true") } else { console.log("false") }
因?yàn)槿绻莍sSucees : "true" ,結(jié)果為true,沒(méi)問(wèn)題,但是如果是isSucess:"false",結(jié)果依舊為true,
因?yàn)檫@里的isSuccess不是boolean,而是一個(gè)非空類(lèi)型,既然非空,if就是為true
如果,默認(rèn)undefined,if則為false
5:使用"that"
建議在 page{}外面定義一個(gè)that變量,然后在onLoad中賦值為this,以后所有的地方,都可以使用that,這樣就避免有些地方,this并不是指向page的上下文對(duì)象
//上下文對(duì)象 var that; page({ onLoad: function (options) { // 頁(yè)面初始化 options為頁(yè)面跳轉(zhuǎn)所帶來(lái)的參數(shù) that = this; } ... that.setData({ xxx: xxx, }) })
6:page的生命周期方法
只有onload中有options參數(shù),可以獲取頁(yè)面?zhèn)髦档鹊龋琽nload只會(huì)執(zhí)行一次
但是onShow可以每次切換頁(yè)面的時(shí)候執(zhí)行,所以,需要每次刷新頁(yè)面的數(shù)據(jù)請(qǐng)求,可以放在onShow中,測(cè)試過(guò),性能體驗(yàn)基本無(wú)影響
page的生命周期沒(méi)有Android那么豐富,頁(yè)面之間傳值也有一定的限制。
可以通過(guò)普通的url的傳值方式傳值,xxx?key = value ,但是要注意:我們傳的值其實(shí)是相當(dāng)于字符串和url拼接在一起,請(qǐng)不要直接傳一個(gè)對(duì)象,因?yàn)閷?duì)象沒(méi)有toString方法。
傳遞json對(duì)象的步驟為:
1.把json對(duì)象變成字符串,如果本身就是那就直接用,如果是json對(duì)象,需要 parseString(json)
2.和url進(jìn)行參數(shù)拼接?key=value
3.取得時(shí)候在onload的options里面取出,
onLoad: function (options) { var value= options.key }
然后JSON.stringify(value)轉(zhuǎn)為json對(duì)象使用
7: 頁(yè)面間跳轉(zhuǎn)
從主頁(yè)跳轉(zhuǎn)一個(gè)新的界面 新界面處理完邏輯 成功與否 結(jié)束之后怎么通知 主頁(yè)結(jié)果?
這種情況,一般是沒(méi)有辦法解決的。經(jīng)過(guò)測(cè)試,如果你想要從二級(jí)非主頁(yè)界面直接navigator打開(kāi)主頁(yè),是不行的,會(huì)報(bào)錯(cuò)。
所以,我們采用的策略是:二級(jí)界面處理完數(shù)據(jù)之后,直接返回,然后在主頁(yè)界面重新拉取數(shù)據(jù)。所以會(huì)出現(xiàn),我們的請(qǐng)求接口是在onShow方法里面執(zhí)行的。因?yàn)閛nload只會(huì)執(zhí)行一次
8:wxml
1.text標(biāo)簽可以使用bindtap
可以使用這種方式來(lái)顯示默認(rèn)的圖片
3.再?gòu)?qiáng)調(diào)一下 在標(biāo)簽中使用data-xx-oo ="value",在對(duì)應(yīng)對(duì)象中可以通過(guò)e.currentTarget.dataset.xxOo獲得,這里的xx-oo ,-其實(shí)是會(huì)轉(zhuǎn)義駝峰。這種一般使用場(chǎng)景為 你可以給你所點(diǎn)擊或者綁定事件的view設(shè)置一個(gè)數(shù)據(jù),比如你一個(gè)picker里面有5個(gè)view,就可以綁定每個(gè)view不同的值,在觸發(fā)事件的時(shí)候取到相應(yīng)的值
4.如果你想要顯隱view你可以通過(guò)wx:if="true/false"來(lái)處理,但是這樣的話,如果為false,page不會(huì)去渲染這個(gè)view,它所在的位置空間也不會(huì)預(yù)留,假如下面的view就會(huì)往上排。如果想要留存它的位置空間,可以修改其style樣式來(lái)解決
9:統(tǒng)一網(wǎng)絡(luò)請(qǐng)求處理結(jié)果
你可以封裝一下網(wǎng)絡(luò)請(qǐng)求的返回結(jié)果,做統(tǒng)一處理
requestWithGet: function(paramsData) { data.method = 'GET' this.requestInternal(paramsData) }, requestWithPost: function(paramsData) { data.method = 'POST' this.requestInternal(paramsData) }, requestInternal: function (paramsData) { var that = this; console.log('requestInternal: 開(kāi)始請(qǐng)求接口[' + paramsData.url + ']'); //開(kāi)始網(wǎng)絡(luò)請(qǐng)求 wx.request({ url: paramsData.url, data: paramsData.data, method: paramsData.method, success: function (res) { console.log('requestInternal: 接口請(qǐng)求成功[' + paramsData.url + ']'); paramsData.success(res); }, fail: function (res) { console.log('requestInternal: 接口請(qǐng)求失敗[' + paramsData.url + ']'); console.log(res); ////在這里做請(qǐng)求失敗的統(tǒng)一處理 wx.showToast({ title: '網(wǎng)絡(luò)訪問(wèn)失敗', duration: 1500 }) typeof paramsData.fail == "function" && paramsData.fail(res); }, complete: function (res) { //在這里做完成的統(tǒng)一處理 typeof paramsData.complete == "function" && paramsData.complete(res); } }) }
這樣在使用請(qǐng)求的時(shí)候,可以直接先wx.request({}) 這樣,就可以IDE給你聯(lián)想生成對(duì)應(yīng)的請(qǐng)求格式,然后直接把“wx.request” 替換 “requestWithGet”或者“requestWithPost”就OK了
關(guān)于“開(kāi)發(fā)微信小程序?qū)嵗治觥钡膬?nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。